2016-01-05 40 views
1

我想使用Array.map來切片數組內的每個對象的description屬性。在對象數組上使用Array.map()

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

在這種情況下,你需要使用的是'each'不'圖()'因爲你沒有做 –

+0

工作正常,我在數組中的項目的任何改造 - 火狐43.0.3 - > https://jsfiddle.net/rockerest/o9evwjmg/ – rockerest

+0

@rockerest:它的工作原理是因爲您沒有將'map'返回的垃圾數組分配回'docs',因此它最終相當於'forEach'循環(它只是製作了臨時數組並將其扔掉)。 – ShadowRanger

回答

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); 
}); 
+0

我認爲作者需要保存已更改的'docs',所以他使用'.map' –

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

我認爲它應該是這樣的。

1

這是因爲您在地圖中返回array而不是currentValue。 應該

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

在這種情況下,你需要使用的是forEach()map()因爲你沒有做數組

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

.map()在項目的任何改造來改變各項,並返回一個新的對象,因爲在你的情況下,你只是改變每個項目的屬性,沒有必要使用它。

+3

'Array.prototype.forEach()'? – guest271314

+0

@ guest271314是 –