如何搜索嵌套的javascript对象并根据值返回键



所以我有一个结构类似的大对象:

var obj = {
'1': {
name: "Naruto Uzumaki",
series: "Naruto"
},
'2': {
name: "Sasuke Uchiha",
series: "Naruto"
},
'3': {
name: "Edward Elric",
series: "Fullmetal Alchemist"
},
'4': {
name: "Alphonse Elric",
series: "Fullmetal Alchemist"
}
}

我想知道如何通过名称或序列进行搜索并返回响应的id。例如:

//I search for Fullmetal Alchemist it should return this:
['3', '4']
//I search for Naruto Uzumaki it returns
['1']
//I search for Elric it returns
['3', '4']
//And I search for Naruto it returns
['1', '2']

所以基本上我在寻找一个搜索函数来浏览所有嵌套的对象。

我还想指出的是,我是在nodejs环境中这样做的。

尝试此代码

var obj = {
1: {
name: 'Naruto Uzumaki',
series: 'Naruto',
},
2: {
name: 'Sasuke Uchiha',
series: 'Naruto',
},
3: {
name: 'Edward Elric',
series: 'Fullmetal Alchemist',
},
4: {
name: 'Alphonse Elric',
series: 'Fullmetal Alchemist',
},
};
function searchByNameOrSeries(object, nameOrSeries) {
const results = [];
for (const property in object) {
if (
object[property].name.includes(nameOrSeries) ||
object[property].series.includes(nameOrSeries)
) {
results.push(property);
}
}
return results;
}
console.log(searchByNameOrSeries(obj, 'Elric'));
console.log(searchByNameOrSeries(obj, 'Naruto'));

您可以使用Object.entries将对象映射到[key,value]对的数组。然后,您可以执行像filter这样的数组操作,并最终映射为返回键数组而不是对象数组。

为了不只写一个特定的搜索函数,你可以创建一个带有回调的函数,我在这里将其命名为matcher——这是一个matchin函数,它将从数组中获取每个对象作为参数。

var obj = {
'1': {
name: "Naruto Uzumaki",
series: "Naruto"
},
'2': {
name: "Sasuke Uchiha",
series: "Naruto"
},
'3': {
name: "Edward Elric",
series: "Fullmetal Alchemist"
},
'4': {
name: "Alphonse Elric",
series: "Fullmetal Alchemist"
}
}

function search(matcher) {
return Object.entries(obj)
.filter(([key, value]) => matcher(value))
.map(([key]) => key)
}

console.log(
search(value => value.series.match(value.series.match('Fullmetal Alchemist')))
)

最新更新