我有以下数组。
[{
'firstname': 'John',
'surname': 'Smith',
'HouseNo': 'firtree farm'
}, {
'firstname': 'Paul',
'surname': 'Smith',
'HouseNo': 'firtree farm'
}, {
'firstname': 'John',
'surname': 'Smith',
'HouseNo': 'firtreefarm'
}, {
'firstname': 'John',
'surname': 'Smith',
'HouseNo': 'firtree farmhouse'
}, {
'firstname': 'Paul',
'surname': 'Smith',
'HouseNo': 'firtree farmhouse'
}, {
'firstname': 'Paul',
'surname': 'Smith',
'HouseNo': 'FirTree farmhouse'
}]
我需要制作另一个不包含重复元素的数组' HouseNo'而且只是元素' HouseNo。它也需要不区分大小写。
即
[{
'HouseNo': 'firtree farm'
}, {
'HouseNo': 'firtreefarm'
}, {
'HouseNo': 'firtree farmhouse'
}, {
'HouseNo': 'FirTree farmhouse'
}]
该应用程序是基于邮政编码搜索的返回地址集。然后,我可以提供他们可以选择的独特房屋的过滤列表。
MrWarby
答案 0 :(得分:2)
您可以跟踪对象中已经看过的项目,如果您收到seen
中没有的项目,则将其推送到result
。
var seen = {};
var result = data.reduce(function(result, current) {
if (!seen[current.HouseNo]) {
seen[current.HouseNo] = true;
result.push(current.HouseNo);
}
return result;
}, []);
console.log(result);
<强>输出强>
[ 'firtree farm',
'firtreefarm',
'firtree farmhouse',
'FirTree farmhouse' ]
如果要维护对象结构,那么在推送到结果时,只需创建一个像这样的对象
result.push({HouseNo: current.HouseNo});
,结果将是
[ { HouseNo: 'firtree farm' },
{ HouseNo: 'firtreefarm' },
{ HouseNo: 'firtree farmhouse' },
{ HouseNo: 'FirTree farmhouse' } ]
如果数据顺序无关紧要,那么您可以继续将HouseNo
添加到对象中,最后得到keys
这样的
var result = data.reduce(function(result, current) {
result[current.HouseNo] = true;
return result;
}, {});
console.log(Object.keys(result));