我有以下對象的JavaScript數組:如何根據包含屬性的第一個字母來過濾數組?
[{name: '4 Arn', isLetter: false},
{name: 'Abax', isLetter: false},
{name: 'Aramex', isLetter: false},
{name: 'Booking', isLetter: false},
{name: 'Dangerous', isLetter: false},
{name: 'Manali', isLetter: false}]
在上面的陣列,我要檢查每個項目的name
屬性的第一個字母。如果匹配,我只想對象之前追加一個新的對象,如下面的例子:
[{letter: "#", isLetter: true}, // new object
{name: '4 Arn', isLetter: false},
{letter: "A", isLetter: true}, // new Object
{name: 'Abax', isLetter: false},
{name: 'Aramex', isLetter: false},
{letter: "B", isLetter: true}, // new object
{name: 'Booking', isLetter: false},
{letter: "D", isLetter: true}, // new object
{name: 'Dangerous', isLetter: false},
{letter: "M", isLetter: true}, // new object
{name: 'Manali', isLetter: false}]
我試過reduce()
功能,但我不明白爲什麼它給我的錯誤的結果:
var newArr = [];
list.reduce(function(prev, cur, index, originalArrray) {
var previousCharcode = prev.name.toUpperCase().charCodeAt(0);
currentCharCode = cur.name.toUpperCase().charCodeAt(0);
newArr.push(prev);
if(previousCharcode != currentCharCode) {
newArr.splice(index, 0, {isLetter: true, letter: String.fromCharCode(currentCharCode)});
}
return cur;
});
我可以問你爲什麼想去該結構?這真的不是那麼好的設計。更好的做法是將具有相同起始字母的節點放置爲字母節點的子節點,以便在頂層只有字母節點,並且僅在第二層有原始節點。 – trincot
其用於離子列表視圖。 –