developer tip

모델을 가져올 때 1을 true로 또는 0을 false로 변환하는 방법

copycodes 2020. 11. 9. 08:15
반응형

모델을 가져올 때 1을 true로 또는 0을 false로 변환하는 방법


mysql 데이터베이스의 JSON 응답으로 설정된 모델이 있습니다. 모델 데이터는 어떤 용도로 데이터베이스에 부울 / TINYINT 필드에 true 또는 false로 설정 1하거나 0.

내 견해로는 밑줄로 부울을 확인하는 바인딩이 _.isBoolean있습니다. 물론 내 모델이 데이터를 받으면 true 또는 false 대신 1또는 0대신 설정되고 _.isBoolean확인이 실패합니다.

어쨌든 mysql의 JSON 응답이 1or 대신 부울 true 또는 false 값이 0되거나 바람직하게는 캐스트 true또는 false기반으로 가져 오기 (및 뷰 렌더링 전에) 내 모델을 업데이트하는 방법이 있습니까? 그것은 1 또는 0 속성입니까?

예를 들어 내 모델의 데이터가 {"isChecked":"1"}필요할 때 처럼 보입니다 .{"isChecked":true}

제안 해 주셔서 대단히 감사합니다!


당신이 필요로 변환입니다 stringint+와와 부울 할 수있는 결과를 변환 !!:

var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked

parse메서드 에서이 조작을 수행 할 수 있습니다 .

parse : function (response) {
  response.isChecked = !!+response.isChecked;
  return response;
}

double not 사용 :

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);

더 길지만 더 읽기 쉬운 또 다른 옵션이 있습니다.

Boolean(Number("0")); // false
Boolean(Number("1")); // true

속성 값에 비교 할당

자바 스크립트

속성 비교를 다음에 할당 할 수 있습니다. "1"

obj["isChecked"] = (obj["isChecked"]==="1");

이것은 String 값에 대해서만 평가됩니다 "1". 다른 변수는 실제 typeof number거짓 인 것처럼 거짓으로 평가됩니다. (예 obj["isChecked"]=1)

"1"또는 1대해 무차별 화하고 싶다면 다음을 사용할 수 있습니다.

obj["isChecked"] = (obj["isChecked"]=="1");

예제 출력

console.log(obj["isChecked"]==="1"); // true
console.log(obj["isChecked"]===1); // false
console.log(obj["isChecked"]==1); // true
console.log(obj["isChecked"]==="0"); // false
console.log(obj["isChecked"]==="Elephant"); // false

PHP

PHP에서 동일한 개념

$obj["isChecked"] = ($obj["isChecked"] == "1");

JavaScript에 대해 위에서 언급 한 것과 동일한 연산자 제한이 적용됩니다.

더블 아닙니다

'double not'도 작동합니다. 사람들이 처음 읽을 때 혼란 스럽지만 정수 / 숫자 유형 값에 대해 두 언어 모두에서 작동합니다. 그러나 항상 true로 평가되므로 문자열 유형 값에 대해서는 JavaScript에서 작동하지 않습니다.

자바 스크립트

!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false

PHP

echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false

변환 1 '1''true'true0 '0' 'false' nullundefinedfalse

function primitiveToBoolean(value: string | number | boolean | null | undefined): boolean {
  if (value === 'true') {
    return true;
  }

  return typeof value === 'string'
    ? !!+value   // we parse string to number first
    : !!value;
}

다음은 단위 테스트입니다.

describe('primitiveToBoolean', () => {
  it('should be true if its 1 / "1" or "true"', () => {
    expect(primitiveToBoolean(1)).toBe(true);
    expect(primitiveToBoolean('1')).toBe(true);
    expect(primitiveToBoolean('true')).toBe(true);
  });
  it('should be false if its 0 / "0" or "false"', () => {
    expect(primitiveToBoolean(0)).toBe(false);
    expect(primitiveToBoolean('0')).toBe(false);
    expect(primitiveToBoolean('false')).toBe(false);
  });
  it('should be false if its null or undefined', () => {
    expect(primitiveToBoolean(null)).toBe(false);
    expect(primitiveToBoolean(undefined)).toBe(false);
  });
  it('should pass through booleans - useful for undefined checks', () => {
    expect(primitiveToBoolean(true)).toBe(true);
    expect(primitiveToBoolean(false)).toBe(false);
  });
});

TypeScript 레시피 : Elegant Parse Boolean

참고 URL : https://stackoverflow.com/questions/16313222/how-to-convert-1-to-true-or-0-to-false-upon-model-fetch

반응형