function getObjKey(obj, value) {
return Object.keys(obj).find(key => obj[key] === value);
}
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago'};
console.log(getObjKey(obj, ['Santiago','Germany']));
我想得到 ['Santiago','Germany'] 這個陣列值作為 city1 的鍵
console.log(getObjKey(obj, 'Chicago'));
當我嘗試上面的代碼時,我得到了“芝加哥”作為 city2 的鍵。
同樣,我也想獲得 ['Santiago','Germany'] 的密鑰。我怎樣才能做到這一點?
有什么建議么?
感謝您的回復。
現在我的物件看起來像
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago', level1:
{level2 : [{level3:chennai},{level4:madurai}]};
當我經過
[{level3:chennai},{level4:madurai}]
作為一個論點,我需要得到它的關鍵 level2 。我找不到那個。對此有任何建議。
uj5u.com熱心網友回復:
您可以檢查它value是否是一個陣列,如果是,請使用Array#every以下方法檢查是否value找到:
function getObjKey(obj, value) {
return Object.keys(obj).find(
key => Array.isArray(value) ?
value.every((val,i) => val === obj[key][i] || '') &&
obj[key].every((val,i) => val === value[i] || '') :
obj[key] === value
) || '';
}
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago'};
console.log(getObjKey(obj, ['Santiago','Germany']));
console.log(getObjKey(obj, 'Chicago'));
console.log(getObjKey(obj,['Santiago','Germany', 'Chicago','Santiago']));
uj5u.com熱心網友回復:
您可以使用Object.entries(),
檢查值是否為陣列,并檢查值是否存在:
function getObjKey(obj, value) {
return Object.entries(obj).find(([k, v]) => {
if(Array.isArray(value)) {
return value.every(item => v.includes(item));
}
return v === value;
})?.[0];
}
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago'};
console.log(getObjKey(obj, ['Santiago','Germany']));
console.log(getObjKey(obj, 'Chicago'));
uj5u.com熱心網友回復:
基本上,您正在嘗試使用比較操作員(===)比較相同的陣列。他們看起來相同,但他們是兩個截然不同的人:)
對于OR Arrays,Objects它不是指向相同的物件,而是具有相同值的不同物件。
因此,通過比較,我們正在比較參考文獻,但沒有比較值。這就是它將永遠回傳的原因false。
console.log(['Santiago','Germany'] === ['Santiago','Germany']); // false
要比較值,我們必須做這樣的事情:
function getObjKey(obj, value) {
return Object.keys(obj).find(key => {
if (typeof obj[key] === 'object' && obj[key].length === value.length) {
return obj[key].every(item => value.includes(item))
}
});
}
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago'};
console.log(getObjKey(obj, ['Santiago','Germany']));
uj5u.com熱心網友回復:
主意:
您需要檢查是否obj[key]是一個Arrayif Array 然后用于every檢查它是否與所有值匹配,如果它不只是檢查obj[key]===value
檢查兩個陣列是否相等every()會導致一個常見的錯誤,['A', 'B'] !same ['A', 'B', 'C']但是如果我們使用它every(),['A', 'B']它會回傳,true盡管這兩個陣列不相同。因此,我們需要事先檢查長度。
const getObjKey = (obj, value) => {
return Object.keys(obj).find(key => {
const currVal = obj[key];
return Array.isArray(currVal) && Array.isArray(value) && currVal.length === value.length ? value.every(val => currVal.includes(val)) : currVal === value
});
}
const obj = {
city1: ['Santiago', 'Germany'],
city2: 'Chicago',
city3: 'Berlin'
};
console.log(getObjKey(obj, ['Santiago', 'Germany']));
console.log(getObjKey(obj, 'Chicago'));
console.log(getObjKey(obj, ['Santiago', 'Germany', 'Erlangen']));
console.log(getObjKey(obj, ['Berlin']));
uj5u.com熱心網友回復:
您可以使用json.stringify。
例子:
function getObjKey(obj, value) {
return Object.keys(obj).find(key => Array.isArray(obj[key]) ? JSON.stringify(obj[key]) === JSON.stringify(value) : obj[key] === value) ;
}
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago'};
console.log(getObjKey(obj, 'Chicago'));
console.log(getObjKey(obj, ['Santiago','Germany']));
輸出:
城市2
城市1
uj5u.com熱心網友回復:
您不能將陣列與 進行比較===,臨時解決方案可以將值決議為字串,然后檢查它們是否相等:
function getObjKey(obj, value) {
return Object.keys(obj).find(key => JSON.stringify(obj[key]) === JSON.stringify(value));
}
但正如我所說,這應該是一個臨時解決方案,因為對于較大的物件來說它會很慢,并且 JSON.stringify 會做不必要的作業。
第二個選項可以對不同的資料結構有不同的程序,如果陣列中的順序很重要并且您不處理串列中的物件就足夠了:
function getObjKey(obj, value) {
return Object.keys(obj).find(key => {
if (Array.isArray(obj[key])) {
return obj[key].every((element, index) => element === value[index]);
}
return obj[key] === value;
});
}
uj5u.com熱心網友回復:
這是我的版本,可能變化最少:
function getObjKey(obj, value) {
const valueToCompare = (rawValue) => (rawValue && rawValue.constructor === Array) ? rawValue.join('-') : rawValue;
return Object.keys(obj).find(key => valueToCompare(obj[key]) === valueToCompare(value));
}
const obj = {city1: ['Santiago','Germany'], city2: 'Chicago'};
console.log(getObjKey(obj, ['Santiago','Germany']));
console.log(getObjKey(obj, 'Chicago'));
這種轉換可能是在對其進行分析之前結構化正在處理的資料并將每個部分的代碼分開以便于理解的提示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/528722.html
