【问题标题】:Returning an array containing named properties of each object返回包含每个对象的命名属性的数组
【发布时间】:2014-07-08 00:51:31
【问题描述】:

只是被难住了,不知道为什么我的代码不起作用。指令是获取一个对象数组和一个属性名称,并返回一个包含每个对象的命名属性的数组。 所以像pluck([{a:1}, {a:2}], 'a') // -> [1,2] 这样的东西 pluck 是我想要创建的函数。

到目前为止,我有:

function pluck(objs, name) {
  var pushedArray=[];
  for (i=0;i<objs.length;i++){
    var totalpushedArray = pushedArray.push(name[i]);
  }
}

但据我所知,代码本身并不能正常工作。如果对象没有该属性,还有其他准则可以离开 undefined,但我想我会在我先解决这个问题后解决这个问题。

【问题讨论】:

  • 顺便说一句,使用for(var i 而不是for(i=0。现在你的 i 变量是全球性的!

标签: javascript arrays


【解决方案1】:

您忘记添加 return 语句并且您没有引用 object 属性。见下文。

function pluck(objs, name) {
    var pushedArray = [];
    for (var i = 0; i < objs.length; i++) {
        pushedArray.push(objs[i][name]);
    }
    return pushedArray;
};

如果你想要一个更“实用”的解决方案,你可以使用 map。

function pluck(objs, name) {
    return objs.map(function(obj) {
        return (obj.hasOwnProperty(name) ? obj[name] : null);
    });
};

【讨论】:

  • 语法为什么是.push(objs[i][name]);
  • objs[i] 表示索引 i 处的对象。 objs[i][name] 表示索引 i 处对象的对象属性 name。在 JavaScript 中,您可以使用方括号表示法通过字符串名称反映或访问属性。 This might help explain it.
  • 我是不是走错了路?我认为访问对象属性的语法是name person.lastNamename = person["lastName"]。但是,如果我根据您写的内容来考虑,那会不会是a[a]之类的东西?
  • 就像,如果你看pluck([{a:1}, {a:2}], 'a') // -&gt; [1,2]obj[i] a 不是在数组中的每个点上吗? name 也是一个
  • 提供给 pluck 的参数是一个对象数组。所以这就是为什么引用是objs[i] 因为objs 是一个数组而objs[i] 是对象。所以要引用对象的属性,然后使用objs[i][name]。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2012-04-28
  • 1970-01-01
  • 2018-04-25
  • 2022-10-12
相关资源
最近更新 更多