我想知道如何在javascript中比較物件值和陣列值
如果array valueandobject value相同,那么如何回傳
object key javascript中的值
var result = obj.values(obj).includes(arr2) ?
'status: active' : 'status: inactive'
var obj = {
"active": 12,
"inactive": 14
"neutral": 16
}
var arr1=[12]
var arr2=[12, 14]
var arr3=[12, 16]
Expected Output
//for arr1
status: active
// for arr2
status: active
status: neutral
// for arr3
status: active
status: inactive
uj5u.com熱心網友回復:
你可以簡單地迭代通過陣列,然后嘗試獲取[key, value]通過回傳的元組Object.entries(obj),其value陣列值相匹配。找到后,回傳key元組中的 ,即:
arr.map(v => Object.entries(obj).find(x => x[1] === v)[0]);
注意:如果您的陣列可能包含物件中不存在的值,則上面的代碼將引發錯誤,因為.find()將回傳未定義。如果是這種情況,您需要捕獲使用無效值的情況(防御性設計):
arr.map(v => {
const foundTuple = Object.entries(obj).find(x => x[1] === v);
return foundTuple ? foundTuple[0] : null;
});
請參閱下面的概念驗證:
const obj = {
"active": 12,
"inactive": 14,
"neutral": 16
}
const arr1 = [12];
const arr2 = [12, 14];
const arr3 = [12, 16];
const invalid_arr = [12, 999];
function getKeys(obj, arr) {
return arr.map(v => {
const foundTuple = Object.entries(obj).find(x => x[1] === v);
return foundTuple ? foundTuple[0] : null;
});
}
console.log(getKeys(obj, arr1));
console.log(getKeys(obj, arr2));
console.log(getKeys(obj, arr3));
console.log(getKeys(obj, invalid_arr));
uj5u.com熱心網友回復:
另一種解決方案
const obj = { "active": 12, "inactive": 14, "neutral": 16 }
const arr1 = [12];
const arr2 = [12, 14];
const arr3 = [12, 16];
const getStatuses= (obj, arr) => arr
.map(arrValue => {
const [status] = Object.entries(obj)
.find(([objKey, objValue]) => objValue === arrValue)
?? [null];
return { status };
});
console.log(getStatuses(obj, arr1));
console.log(getStatuses(obj, arr2));
console.log(getStatuses(obj, arr3));
.as-console-wrapper{min-height: 100%!important; top: 0}
uj5u.com熱心網友回復:
您應該檢查陣列是否包含物件值,反之亦然:
function* matches(object, array) {
for (const [key, value] of Object.entries(object)) {
if (array.includes(value))
yield key;
}
};
for (const match of matches(obj, arr1))
console.log(`status: ${match}`);
for (const match of matches(obj, arr2))
console.log(`status: ${match}`);
for (const match of matches(obj, arr3))
console.log(`status: ${match}`);
這應該有效。
uj5u.com熱心網友回復:
使用獲取鍵Object.keys(),然后通過從原始物件中獲取值來過濾它們,并檢查它是否包含在陣列中:
const getStatus = (obj, arr) => Object.keys(obj)
.filter(key => arr.includes(obj[key]))
const obj = { "active": 12, "inactive": 14, "neutral": 16 }
const arr1 = [12];
const arr2 = [12, 14];
const arr3 = [12, 16];
console.log(getStatus(obj, arr1));
console.log(getStatus(obj, arr2));
console.log(getStatus(obj, arr3));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407463.html
標籤:
上一篇:strlen在c中回傳錯誤的答案
