我正在尝试使用纯JS重新创建Underscore pluck函数。但是,我不断得到未定义数组的返回,而不是返回数组中对象属性的实际值。

检查另一个线程here我发现您可以使用以下代码在jQuery中重现它...

$.pluck = function(arr, key) {
    return $.map(arr, function(e) { return e[key]; })
}

...但是我很难用纯JS复制它。我尝试了以下操作,但是这只是为我返回了一个未定义的数组。
var pluck = function(arr,key){
  var newArr = [];
  for (var i = 0, x = arr.length; i < x; i++){
    if (arr[i].hasOwnProperty(key)){
      newArr.push(arr[i].key)
    }
  }
  return newArr;
}

因此,目标将是以下目标,除了使用下划线_.pluck之外,仅使用JS函数名称即可。 var pluck = function(arr,key){...}
var Tuts = [{name : 'NetTuts', niche : 'Web Development'}, {name : 'WPTuts', niche : 'WordPress'}, {name : 'PSDTuts', niche : 'PhotoShop'}, {name : 'AeTuts', niche : 'After Effects'}];
var niches = _.pluck(Tuts, 'niche');

console.log(niches);

// ["Web Development", "WordPress", "PhotoShop", "After Effects"]

有人可以指引我正确的方向吗?

最佳答案

在ES5中:

function pluck(array, key) {
  return array.map(function(obj) {
    return obj[key];
  });
}

在ES6中:
function pluck(array, key) {
  return array.map(o => o[key]);
}

09-28 11:09