簡體   English   中英

如果對象值為true且鍵位於數組中,則獲取對象鍵。 使用Javascript

[英]Get object keys if object value is true and key is in array. Javascript

考慮以下對象

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

您可以使用一個檢查值的函數。

 const check = k => object[k] === true; var object = { 1: true, 2: false, 3: true }; console.log(check(1)); console.log(check(2)); 

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

如果其中一個元素通過了檢查,則一些數組函數將返回true。

Object.values(obj).some(value => value == true))

當您在此處檢查值時,您未指定ID(之前對ID的檢查是單獨的)。 因此,它將檢查數組的所有元素,直到一個通過檢查為止(索引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因為在整個obj 中至少有一個true值。 此操作的結果不依賴於鍵的值-僅取決於鍵是否運行。

 let obj = { 1:true, 2:false, 3:true } let check = Object.values(obj).some(value => value == true) console.log(check); 

因此,算法檢查obj包含給定的關鍵,這是任何價值true ,而不是假設某個鍵的值是真實的。

您不需要在對象上循環以驗證這一點-只需獲取obj[val]的值-如果鍵val不存在,則將得到undefined返回值,否則將獲得該值。 因此,您只需要檢查返回的值是否true

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

使用隱式強制轉換為boolean可以將其進一步縮短為!!obj[index]

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM