在对象数组上使用Array.map()

时间:2016-01-05 05:30:03

标签: javascript arrays

我正在尝试使用Array.map来对数组中每个对象的description属性进行切片。

docs = docs.map(function(currentValue, index, array){
            currentValue['description'] = currentValue.description.slice(0,10);
            return array;
        });

当我console.log(docs)时,它看起来好像有效了。但是,由于某种原因,我无法再访问这些属性。

console.log(docs[0].description); //undefined

看来我已经将我的对象数组变成了一个看似是对象的字符串数组。有什么想法吗?

4 个答案:

答案 0 :(得分:3)

.map中的回调不应该返回array - 它应该返回您希望数组中的特定项具有的新值。

docs = docs.map(function(item){
  item.description = item.description.slice(0, 10);
  return item;
});

如果您正在做的只是转换数组中的每个项目,那么使用.forEach代替它会更高效。 .map创建全新数组,而.forEach只是循环遍历现有数组。它也需要更少的代码。

docs.forEach(function(item){
  item.description = item.description.slice(0, 10);
});

答案 1 :(得分:1)

这是因为您在地图而不是array中返回currentValue。 它应该是

docs = docs.map(function(currentValue, index, array){
        currentValue['description'] = currentValue.description.slice(0,10);
        return currentValue;
    });

答案 2 :(得分:1)

在这种情况下,您需要使用的是forEach()而非map(),因为您没有对数组中的项进行任何转换

docs.forEach(function(currentValue, index, array){
    currentValue['description'] = currentValue.description.slice(0,10);
});

.map()用于转换数组中的每个项目并返回一个新对象,因为在您的情况下,您只是更改每个项目的属性,因此无需使用它。

答案 3 :(得分:0)

docs = docs.map(function(currentValue, index, array){
        docs[index]['description'] = currentValue.description.slice(0,10);
        return array;
    });

我认为应该是这样的。