我有一个像这样的对象:
var obj = {
107: {name: "test", id: 772},
124: {name: "hello", id: 123},
120: {id: 213}
}
如何从name
检索obj
的数组,例如输出应为:["test", "hello"]
我将如何做到这一点?
答案 0 :(得分:2)
您可以使用reduce
,Object.values
和函数includes
来避免重复值。
var obj = {
'107': {name: "test", id: 772},
'124': {name: "hello", id: 123},
'125': {name: "hello", id: 1233},
'120': {id: 213}
}
var result = Object.values(obj).reduce((a, {name}) => {
if (name && !a.includes(name)) a.push(name);
return a;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
为避免重复值,您也可以使用对象Set
:
var obj = {
'107': {name: "test", id: 772},
'124': {name: "hello", id: 123},
'125': {name: "hello", id: 1233},
'120': {id: 213}
}
var result = Array.from(Object.values(obj).reduce((a, {name}) => {
if (name) a.add(name);
return a;
}, new Set()).values());
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
由于对象始终采用此形式,因此您可以执行单行过滤器/贴图:
var obj = { 107: {name: "test", id: 772},124: {name: "hello", id: 123},120: {id: 213}}
var names = Object.values(obj).filter(v => v.name).map(i => i.name)
console.log(names)

答案 2 :(得分:1)
你可以使用Object.keys()
来获取obj对象的一组键,然后减少那些:
const obj = {
107: {name: "test", id: 772},
124: {name: "hello", id: 123},
120: {id: 213}
}
console.log(
Object.keys(obj).reduce((a,key) => {
obj[key].name && a.push(obj[key].name)
return a
},[])
)