2020년 8월 31일 월요일

JavaScript, Array.some(), Array.every()

 Array.every(callbackfn: (value: T, index: number, array: T[]) => unknow, thisArg?: any): boolean

    const array = ['A''B''C''D''E'];

    // result : false
    const result = array.every(item => item === 'C');

Array.every()는 배열의 모든 항목이 조건과 일치해야 true를 반환한다.


Array.some(callbackfn: (value: T, index: number, array: T[]) => unknow, thisArg?: any): boolean

    const array = ['A''B''C''D''E'];

    // result : true
    const result = array.some(item => item === 'C');

Array.some()은 배열의 항목중 하나라도 조건과 일치 하면 true를 반환한다.


JavaScript, Array.slice, Array.Splice 비교

Array.slice(start?: number, end?: number): T[];

    const array = [12345];

    // 인자값을 넘기지 않으면 array배열을 반환한다.
    // result : [1, 2, 3, 4, 5]
    const result1 = array.slice();

    // 인자값을 하나 넣으면 start로 지정되고 지정된 Index부터 마지막까지 반환한다.
    // result : [3, 4, 5] 
    const result2 = array.slice(2);

    // 인자값을 두개(모두) 넣으면 start 와 end가 지정된 배열을 반환한다.
    // result : [2, 3]
    const result3 = array.slice(13);


Array.splice(start:number, deleteCount?: number): T[];

    const array = [12345];

    // 인자값을 넘기지 않으면 빈배열을 반환한다.
    // result : []
    const result1 = array.splice();


    const array = [12345];

    // 인자값을 하나 넣으면 start로 지정되고 지정된 Index부터 마지막까지 반환한다.
    // result : [3, 4, 5]
    const result2 = array.splice(2);


    const array = [12345];

    // 인자값을 두개(모두) 넣으면 start 와 end가 지정된 배열을 반환한다.
    // result : [2, 3, 4]
    const result3 = array.splice(13);


slice와 splice는 비슷한 기능을 수행하지만 위 코드를 보면 차이가 있는걸 확인할수 있다.

1. 인자값을 넘기지 않았을때의 반환되는 값

    slice()는 대상 배열의 모든값을 반환하지만 splice()는 아무것도 반환하지 않는다.

2. 두번째 인자값의 처리방법

    slice(), end?:number, 배열의 처음부터 index만큼 움직인다고 생각하면 된다. 또한 index항목의 값은 포함하지 않는다.

    splice(), deleteCount?: number, 배열의 처음이 아닌 첫 인자(start: number)값을 기준으로 두번째 인자값 만큼의 배열값을 반환한다.


Array.slice(), Array.splice()는 처리 대상의 배열이 처리전과 처리후의 값이 다르다.

Array.slice()는 처리후에도 원래의 값을 유지하고 있는 반면 Array.splice()는 처리후 원래의 값이 변경된다.


Array.slice();

    const array = [12345];

    // result : [4, 5]
    // array : [1, 2, 3, 4, 5]
    const result = array.slice(3);


Array.splice();

    const array = [12345];

    // result : [4, 5]
    // array : [1, 2, 3]
    const result = array.splice(3);


어떤 처리를 하느냐에 따라 두 기능을 활용하면 될것같다.

2020년 8월 30일 일요일

JavaScript, Array

length: number;
    const array = [12345];
    // 배열의 길이
    const arrayLength = array.length;

    // 5
    console.log(arrayLength)

pop(): undefined; 
    const array = [12345];
    // 배열의 마지막 항목 제거
    array.pop();

    // [1, 2, 3, 4]
    console.log(array);

push(...items: T[]): number;
    const array = [];
    // 배열에 새로운 항목 추가
    array.push(1);
    array.push(23);

    // [1, 2, 3]
    console.log(array);

concat(...items: ConcatArray<T>[]): T[];
    const array1 = ['A''B'];
    const array2 = [123];

    // 배열을 합친다.
    const array3 = array1.concat(array2);

    // ['A', 'B', 1, 2, 3]
    console.log(array3);

join(separator?: string): string
    const array = [12345];

    // 배열을 string으로 변경
    const result = array.join();
    const result1 = array.join('/');

    // 1, 2, 3, 4, 5 1/2/3/4/5
    console.log(resultresult1);

reverse(): T[];
    const array = [12345];

    // 배열항목을 뒤집는다.
    const result = array.reverse();

    // [5, 4, 3, 2, 1]
    console.log(result);

indexOf(searchElement: T, fromIndex?: number): number
    const array = ['A''B''C''D''E'];

    // 배열의 항목중 같은 항목을 찾아 그 항목의 Index값을 리턴
    const result = array.indexOf('C');

    // 2
    console.log(result);

    const result1 = array.indexOf('Z');

    // -1
    console.log(result1);


2019년 12월 19일 목요일

MongoDB, Like사용


LIKE를 사용하여 이름에 'aaa'가 포함된 데이터를 조회한다.
SELECT *
FROM user
WHERE name LIKE '%aaa%'

MongoDB에서의 사용방법

String name = "aaa";
Query query = new Query();
query.addCriteria(Criteria.where("name").regex(name);

2019년 10월 3일 목요일

ImageView를 사용하여 toggle 기능 사용하기, android

즐겨 찾기 기능을 위해 ImageView를 사용한 Toggle기능을 구현.

먼저 사용할 이미지를 준비한다.
https://www.iconfinder.com/search/?q=star&from=homepage&type=vector&price=free


res/drawable/selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_activated="true"
        android:drawable="@drawable/ic_star_24dp" />
    <item
        android:drawable="@drawable/ic_star_border_24dp" />
</selector>

ImageView
<ImageView
  android:src="@drawable/selector"
  ..
  .. />

ImageView - onClick

star.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        view.setActivated(!view.isActivated());
    }
});

2019년 8월 22일 목요일

Querydsl, replace

1
2
3
SELECT *
FROM table
WHERE replace(column_name, ' ', '') =  'aaa'



1
2
3
4
5
StringExpression se = StringTemplate.create("replace({0}, ' ', '')", column_name);

return select().from(o).where(
         se.eq('aaa')
       ).list(o);

2019년 8월 1일 목요일

Firebase, Firebase storage에 업로드 및 업로드파일 다운로드 링크 가져오기

로컬파일에서 업로드

1
2
// AndroidManifest.xml에 사용권한 추가
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 내부 사진첩 열기
ImageView imageView = findViewById(R.id.img);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
        startActivityForResult(intent, 1000);
    }
});

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    switch (requestCode) {
        case 1000:
            // 선택한 이미지를 ImageView에 표시
            imageView.setImageURI(data.getData());
            // 이미지 내부경로
            imagePath = getPath(data.getData());
            break;
    }
}

private String getPath(Uri uri) {
    String [] proj = {MediaStore.Images.Media.DATA};
    CursorLoader cursorLoader = new CursorLoader(this, uri, proj, null, null, null);

    Cursor cursor = cursorLoader.loadInBackground();
    int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

    cursor.moveToFirst();

    return cursor.getString(index);
}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 전역변수 선언
private FirebaseFirestore db;
private FirebaseStorage storage;
private StorageReference storageRef;
private StorageReference recvRef;

// 초기화 및 Storage 버킷설정
private void init() {
    db = FirebaseFirestore.getInstance();
    storage = FirebaseStorage.getInstance("xxx-xxx.appspot.com");
    storageRef = storage.getReference();
}


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Uri file = Uri.fromFile(new File(companyImgPath));
// 업로드 폴더 지정
recvRef = storageRef.child("company/" + file.getLastPathSegment());
recvRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

        // 업로드 완료후 다운로드 경로 가져오기
        recvRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                // 다운로드 경로 표시 (uri.toString())
                Log.d(TAG, uri.toString());
            }
        });
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        Log.d(TAG, "Image Upload failure.");
    }
});

JavaScript, Array.some(), Array.every()

 Array.every(callbackfn: (value: T, index: number, array: T[]) => unknow, thisArg?: any): boolean      const   array  = [ 'A' ,  ...