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


97

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}

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


사용되는 서버 측 기술은 무엇입니까?
Arun P Johny

PHP, 응답은 쿼리 결과에 json_encode로 작성됩니다
Chris M

당신은 방법을 시도 않았다의 IsChecked =의 IsChecked 사실 : 거짓?
Ulug'bek Ro'zimboyev

답변:


191

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

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

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

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

업데이트 : 7 년 후, 나는 Number(string)더 우아한 전환을 발견 합니다. 또한 개체를 변경하는 것은 최선의 방법이 아닙니다. 즉,

parse: function (response) {
  return Object.assign({}, response, {
    isChecked: !!Number(response.isChecked), // OR
    isChecked: Boolean(Number(response.isChecked))
  });
}

18
+1 int첫 번째 로 변환 합니다. !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
테리 젊은

76

double not 사용 :

!!1 = true;

!!0 = false;

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

2
이것은 나를 위해 일했지만 어떤 이유로 나는 여전히 그것을 파싱해야했습니다value = (!!parseInt(value) ? true : false)
Rick

확실하게하기 위해서, !!2아니면 다른 숫자 = false, 맞습니까?
Elijah Mock

아니요, !! 2는 true입니다. 0 인 경우에만 false입니다
dave

59

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

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

6
가독성 FTW!
zero_cool

7
2020 년에는 이것이 asnwer가되어야합니다
etiennejcharles

13

속성 값에 비교 할당

자바 스크립트

속성 비교를 다음에 할당 할 수 있습니다. "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

'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

좋은 생각 크리스토퍼, 나는 다음과 같이 작성하여 이것을 달성 할 수 있었다. 백본보기.
Chris M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.