如何使用 AngularJS 获取具有唯一值的数组

1 javascript angularjs

我有一个包含重复项的数组。如何获得具有唯一项的数组?

a= [{id: "1", campus: "c1"}, {id: "1", campus: "c1"}, {id: "2", campus: "c2"}, {id: "2", campus: "c2"}]
Run Code Online (Sandbox Code Playgroud)

我想要具有独特对象的结果

a= [{id: "1", campus: "c1"}, {id: "2", campus: "c2"}]
Run Code Online (Sandbox Code Playgroud)

Tus*_*har 5

您可以使用Array#filter如下:

var arr = [{
    id: "1",
    campus: "c1"
}, {
    id: "1",
    campus: "c1"
}, {
    id: "2",
    campus: "c2"
}, {
    id: "2",
    campus: "c2"
}];

// Keep an array of elements whose id is added in filtered array
var elementId = [];

var newArr = arr.filter(el => {
    if (elementId.indexOf(el.id) === -1) {
        // If not present in array, then add it
        elementId.push(el.id);
        return true;
    } else {
        // Already present in array, don't add it
        return false;
    }
});

console.log(newArr);
document.getElementById('result').innerHTML = JSON.stringify(newArr, 0, 4);
Run Code Online (Sandbox Code Playgroud)
<pre id="result"></pre>
Run Code Online (Sandbox Code Playgroud)


基于 OP 的评论

请建议有关性能的最佳方法..

如果你对下划线/lodash没问题

您可以使用 _.uniqWith

_.uniqWith(arr, _.isEqual);
Run Code Online (Sandbox Code Playgroud)

_.uniqWith(arr, _.isEqual);
Run Code Online (Sandbox Code Playgroud)
var arr = [{
    id: "1",
    campus: "c1"
}, {
    id: "1",
    campus: "c1"
}, {
    id: "2",
    campus: "c2"
}, {
    id: "2",
    campus: "c2"
}];

var newArr = _.uniqWith(arr, _.isEqual);
console.log(newArr);
document.getElementById('result').innerHTML = JSON.stringify(newArr, 0, 4);
Run Code Online (Sandbox Code Playgroud)

你也可以使用 _.uniqBy

_.uniqBy(arr, 'id');
Run Code Online (Sandbox Code Playgroud)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.0.1/lodash.js"></script>
<pre id="result"></pre>
Run Code Online (Sandbox Code Playgroud)
_.uniqBy(arr, 'id');
Run Code Online (Sandbox Code Playgroud)