[英]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.