[英]find a specific value in key-value pair of some object in js
我一直在嘗試從鍵值對的值(數組中)中匹配某個值。如果我想搜索id 462,我想像在2013年第一次搜索時一樣進行迭代搜索(如果找不到),然后在2014年和以此類推。
我已經嘗試過Object.values(x),但是它返回了所有兩年的所有數組。
x={'2013':
{ matchId:
[
'386',
'387',
'388',
'389',
'390',
] },
'2014':
{ matchId:
[
'462',
'463',
'464',
'465',
'466',
] },
}
如果找到值,我想在該年份(例如:-2013)中插入一些新的鍵值對,例如
{'2013':
{ matchId:
[
'386',
'387',
'388',
'389',
'390',
]
'Andrew':'23',
'Castle':32}
}
排序鍵,按順序循環,然后檢查所需的值是否在數組中:
const keys = Object.keys(x).sort();
const testValue = '462';
let foundKey;
for (let i = 0; i < keys.length; ++i) {
if (x[keys[i]].matchId.includes(testValue)) {
foundKey = keys[i];
break;
}
}
最后,如果沒有匹配項,則findKey將是未定義的,如果找到第一個匹配對象的鍵(年),則將是未定義的。
遍歷外鍵,年份,如果內部matchId數組包含搜索ID,則將其添加到year對象。
const data = { '2013': { matchId: ['386', '387', '388', '389', '390'] }, '2014': { matchId: ['462', '463', '464', '465', '466'] }, }; const addDataById = (array, searchId, data) => { return array && Object.values(array) .map(year => { if (year.matchId && Object.values(year.matchId).includes(searchId)) { return {...year, ...data}; } return year; }); }; const newData = addDataById(data, '462', { key: 'newData' }); console.log(newData); const newData2 = addDataById(data, '123', { key2: 'newData' }); console.log(newData2); console.log(addDataById(undefined, '462', { key: 'newData' })); console.log(addDataById(5, '462', { key: 'newData' })); console.log(addDataById('array', '462', { key: 'newData' }));
您可以使用hasOwnProperty()方法。 使用以下代碼完成任務
x = { '2013': { matchId: [ '386', '387', '388', '389', '390', ] }, '2014': { matchId: [ '462', '463', '464', '465', '466', ] }, } function findById(id) { for (var key in x) { if (x.hasOwnProperty(key)) { if (x[key]['matchId'].find(x => x == id)) { return { [key]: x[key] } } } } } console.log(findById('390'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.