我有以下对象的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
其用于离子列表视图。 –