如果对象值为true且键位于数组中,则获取对象键。 Java脚本

时间:2019-05-15 13:43:14

标签: javascript arrays object

考虑以下对象

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))
      );

5 个答案:

答案 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);