从一组对象中获取值

时间:2017-11-15 13:43:34

标签: javascript arrays for-loop ecmascript-6

我循环遍历我的数组以获取相应的字段值:

var someFun = function (nm) {
    var names = [{name: 'joe', age: 'nine'}, {name: 'tom', age: 'ten'}];

    for (var i=0; i < names.length; i++) {
        if (names[i].name === nm) return names[i].age;
    }
};

var username = 'tom';
var printme = someFun(username);
console.log('hey: ', printme)

如何使用Object.keys(),map或forEach执行相同的操作?更清洁,符合ES6标准。

5 个答案:

答案 0 :(得分:3)

只需使用find

即可
([{name: 'joe', age: 'nine'}, {name: 'tom', age: 'ten'}].find( (s)=> s.name=="tom" )||{}).age //10

([{name: 'joe', age: 'nine'}, {name: 'tom', age: 'ten'}].find( (s)=> s.name=="tom2" )||{}).age //undefined

<强>演示

&#13;
&#13;
var names = [{
  name: 'joe',
  age: 'nine'
}, {
  name: 'tom',
  age: 'ten'
}];

function getAge(names, name) {
  return (names.find((s) => s.name == name) || {}).age;
}

console.log(getAge(names, "tom"))
console.log(getAge(names, "tom2"))
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用 array.prototype.find

var names = [{name: 'joe', age: 'nine'}, {name: 'tom', age: 'ten'}];
var someFun = (nm) => {        
    var found = names.find(el => el.name === nm);
    return found && found.age || null; 
}
console.log(someFun('tom'));

答案 2 :(得分:1)

来自Array.prototype.find()

  

find()方法返回数组中第一个元素的值   满足提供的测试功能。

如果有多个具有相同名称的对象?

Array.prototype.filter()

var names = [{
    name: 'joe',
    age: 9
  },
  {
    name: 'tom',
    age: 10
  },
  {
    name: 'frank',
    age: 9
  },
  {
    name: 'joe',
    age: 15
  }
];

function getData(arr, search) {
  // Filter array of objects by a search pair
  return arr.filter(o => o[search[0]] === search[1]);
}

function listBy(arr, k) {
  // Output values from an array of objects by a key as a comma separated string 
  return arr.map(o => o[k]).join(",");
}

console.log(getData(names, ["name", "joe"]));
console.log(listBy(getData(names, ["name", "tom"]), "age"));
console.log(listBy(getData(names, ["age", 9]), "name"));

答案 3 :(得分:0)

IE不支持find,请检查Browser compatibility。也许您不需要支持IE,但截至2017年10月它仍然是3.74% of global usage。但是,它确实支持filter

DEMO

var users = [
  { name: "Bill", age: 'nine' },
  { name: 'Tedd', age: 'ten' }
];

function getAgeFromUsers(name) {
  const arr = users.filter(u => u.name === name);
  return !!arr.length ? arr[0].age : "That user ain't here";
}

console.log(getAgeFromUsers('Tedd'));
console.log(getAgeFromUsers("Lion 'O"));

答案 4 :(得分:-1)

var someFun = nm => {
    const names = [{name: 'joe', age: 'nine'}, {name: 'tom', age: 'ten'}];
    const foundName = names.find(name => name.name === nm)

    return foundName ? foundName.age : null
};

这复制了你上面的内容。虽然我会亲自返回物体,然后将年龄从年龄变老,而不是仅仅恢复年龄。