考虑以下对象
let obj = {
1:true,
2:false,
3:true
}
和一些值,例如
let val = 1;
或2
。
我想得到对还是错
在我们的示例中,仅对于1和3,它应该返回true。 我已经尝试过此解决方案,但是当我测试2时,它应该返回false时仍返回true
const isFavourited =
(Object.keys(obj).some(id => val == id &&
Object.values(obj).some(value => value == true))
);
答案 0 :(得分:3)
您可以使用一个检查值的函数。
Position 12:54. Signature (return type) of EventHandler "SmartLockApp.Views.LoginPage.SignInProcedure" doesn't match the event type
答案 1 :(得分:0)
let obj = {
1:true,
2:false,
3:true
}
var val1 = 1,
val2 = 2,
val3 = 3,
val4 = 4
function checkValue(key){
return !!obj[key];
}
console.log(checkValue(val1));
console.log(checkValue(val2));
console.log(checkValue(val3));
console.log(checkValue(val4));
答案 2 :(得分:0)
如果其中一个元素通过了检查,则一些数组函数将返回true。
Object.values(obj).some(value => value == true))
在此处检查值时,您未指定ID(之前对ID的检查是单独的)。因此,它将检查数组中的所有元素,直到一个元素通过检查为止(索引0将通过检查)。
我建议改用妮娜的答案。
答案 3 :(得分:0)
执行以下操作
const isFavourited =
(Object.keys(obj).some(id => val == id &&
Object.values(obj).some(value => value == true))
);
您不检查特定索引的值是true
还是false
。当您拥有val = 1
时,实际上会发生以下情况:
.some
将遍历所有键val == id
将是第二个密钥的true
,这意味着:Object.values(obj).some(value => value == true)
将被执行true
,因为在整个true
中至少有一个值为obj
。此操作的结果不依赖于键的值-仅取决于键是否运行。
let obj = { 1:true, 2:false, 3:true }
let check = Object.values(obj).some(value => value == true)
console.log(check);
因此,该算法检查obj
是否包含给定密钥和任何值为true
,而不是 for 给定的键为真。
您无需遍历对象即可验证这一点-只需获取obj[val]
的值-如果键val
不存在,您将得到{{1 }}返回,否则您将获得价值。因此,您只需要检查返回的值是否为undefined
:
true
可以使用implicit casting to boolean将其进一步缩短为let obj = { 1:true, 2:false, 3:true }
console.log(1, obj[1] == true);
console.log(2, obj[2] == true);
console.log(3, obj[3] == true);
console.log(42, obj[42] == true);
。
答案 4 :(得分:0)
let obj = { 1:true, 2:false, 3:true };
//Create an temp object
let tempObj = {};
//Loop over keys and filter if key value is true and add to temp object
Object.keys(obj).filter((o)=> {if(obj[o]) tempObj[o] = obj[o]});
console.log(tempObj);