当元素重复时,Javascript从多维数组中删除行

时间:2014-04-16 17:53:22

标签: javascript multidimensional-array

我有以下数组。

[{
  '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

1 个答案:

答案 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));