从多个对象获取属性(如果存在)

时间:2018-03-17 22:14:12

标签: javascript object

我有一个像这样的对象:

var obj = {
    107: {name: "test", id: 772},
    124: {name: "hello", id: 123},
    120: {id: 213}
}

如何从name检索obj的数组,例如输出应为:["test", "hello"]

我将如何做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用reduceObject.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
  },[])  
)