【问题标题】:Looping through an list object循环遍历列表对象
【发布时间】:2017-11-19 18:39:44
【问题描述】:

我需要使用 for 循环从列表中取出特定对象

例如我会这样:

var list = [
  {Name: "Jake", Age: 15},
  {Name: "Paul", Age: 20}
];

这里非常简单,但我需要做的是从每个对象返回变量名称,所以在这种情况下我应该只得到 Jake 和 Paul 而不是年龄信息。我知道我可以使用一个简单的 list[0].Name 给我一个输出,但在我想使用 for 循环循环并返回每个名称的极端数量的名称的情况下更是如此。

【问题讨论】:

  • Array#map映射它
  • For 循环非常简单。你写的循环有什么问题?我假设您至少自己尝试过。
  • 您只需要与特定名称相关的数据吗?整个问题以及您的具体问题都不是很清楚。花几分钟阅读How to Askminimal reproducible example
  • 如果你认为你可以通过循环来做到这一点......那么你应该尝试这样做,并在遇到真正的代码问题时提出问题。 Stackoverflow 不是“如何” 教程服务。目的是让您展示您解决问题的尝试,当代码没有达到预期效果时,人们会帮助您处理您的代码

标签: javascript arrays object for-loop


【解决方案1】:

你要找的是地图:

const newList = list.map(function(element){
    return element.Name;
});

map 函数迭代一个数组并为每个迭代值返回一个新值。 在这种情况下,上述函数将返回一个新数组,其中的字符串仅表示列表中每个对象的 Name 属性。

对于相同的功能,只有箭头符号和解构,请查看:

const newList = list.map(({Name}) => Name);

【讨论】:

  • 如果他不知道map,他可能不知道对象解构和胖箭头函数。你介意提供一个更以 es5 为中心的解决方案来帮助他理解吗?
  • @jas7457 当然,习惯的力量
  • 谢谢!它有助于揭开较短(也是我喜欢的)es6 语法的神秘面纱
【解决方案2】:

这是一个简单的for循环:

var list = [{Name: "Jake", Age: 15}, {Name: "Paul", Age: 20}]

let names = [];

for (let i = 0; i < list.length; i++) {
  names.push(list[i].Name);
}

console.log(names);

这是与forEach 相同的结果:

var list = [{Name: "Jake", Age: 15}, {Name: "Paul", Age: 20}]

let names = [];

list.forEach(function (obj) {
  names.push(obj.Name);
});

console.log(names);

如果您愿意,可以使用 map 添加到 Gilad 的答案中,您可以创建一个通用函数,该函数将返回指定对象属性的值,这样您就无需重复代码。

var list = [{Name: "Jake", Age: 15}, {Name: "Paul", Age: 20}]

function getValue(key) {
  return function (obj) {
    return obj[key];
  }
}

let names = list.map(getValue('Name'));
let ages = list.map(getValue('Age'));

console.log(names, ages);

【讨论】:

  • 嗯,这是一个巨大的帮助!感谢您抽出时间来帮助我解决这个问题,因为我是编码新手,并且非常抱歉没有更准确地解释我的编码解释和这里的问题(致其他也加入帮助的人!)
  • 没问题。不要忘记正确的答案,以帮助可能访问此页面的其他人寻找解决方案。
猜你喜欢
  • 2010-10-22
  • 2013-05-29
  • 2015-06-27
  • 1970-01-01
  • 2020-06-09
  • 2019-12-11
  • 1970-01-01
  • 2020-04-30
  • 2017-06-12
相关资源
最近更新 更多