我正在尝试使用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
看来我已经将我的对象数组变成了一个看似是对象的字符串数组。有什么想法吗?
答案 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;
});
我认为应该是这样的。