将对象数组过滤为新数组

时间:2014-10-30 01:59:27

标签: javascript

我有一个包含行信息的对象数组。我试图过滤此信息,以便我得到一个包含每个行值只有一次的新数组。因此,以下对象将输出类似['1', '2', '3']

的数组

这是我的代码。我正在尝试地图功能但不确定这是否是正确的方法:



var myArray = [
    {
        "row": 1,
        "headline": "First Object"
    },
    {
        "row": 1,
        "headline": "Second Object"
    },
    {
        "row": 2,
        "headline": "Third Object"
    },
    {
        "row": 2,
        "headline": "Fourth Object"
    },
    {
        "row": 3,
        "headline": "Fifth Object"
    }
];
    
    var rows = myArray.map(function(row) {
        console.log(row)
    });




3 个答案:

答案 0 :(得分:1)

最简单的方法可能是将所有属性写入对象,然后将它们写回数组:

var o = {},
    uniqueArray = [];

myArray.forEach(function (d) {
    o[d.row] = true; // stores the key equal to d.row in the object
});
for (var k in o) {    // loop through all the keys in o
    if (o.hasOwnProperty(k))    // if the object o has that key
        uniqueArray.push(k);    // push it to the array
}
console.log(uniqueArray);
// ["1", "2", "3"];

答案 1 :(得分:1)

将所有行值放在数组中......

var arrayAll = [];
for (var i = 0; i < myArray.length; i++) {
    arrayAll.push(myArray[i].row)
}

然后删除重复项

var uniqueNames = [];
$.each(arrayAll, function (i, el) {
    if ($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});

console.log(uniqueNames);

如果您需要非JQuery选项,请参阅此帖子以了解删除重复项的其他选项。 Remove Duplicates from JavaScript Array

答案 2 :(得分:1)

对于更易读的方法,我会选择的答案是:

var distinct = function(rows){
    var mappedValues = rows.map(function(single){
        return single.row;
    });
    return mappedValues.filter(function(item,pos){
        return mappedValues.indexOf(item) === pos;
    });
}

distinct(myArray);

只需2美分。