js で配列オブジェクトを重複排除するいくつかの方法
まず配列の形式を定義します
let arrObj = [
{
name: "张三", key: '1' },
{
name: "李四", key: '2' },
{
name: "王五", key: '3' },
{
name: "张三", key: '1' },
{
name: "李四", key: '2' }
];
要件: 同じキー値を持つオブジェクトを削除します。望ましい結果は次のとおりです。
1. 方法 1: 二重層の for ループ
2 対 2 の比較。後のオブジェクトのキー値が前のオブジェクトのキー値と等しい場合、後のオブジェクトを削除します。
let arrObj = [
{
name: "张三", key: '1' },
{
name: "李四", key: '2' },
{
name: "王五", key: '3' },
{
name: "张三", key: '1' },
{
name: "李四", key: '2' }
]
function uniqueArr (arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i].key == arr[j].key) {
arr.splice(j, 1)
j--
}
}
}
return arr
}
console.log(uniqueArr(arrObj));
2. オブジェクトアクセスプロパティのメソッド
属性値が存在するかどうかは、オブジェクトアクセス属性のメソッドを使用して判断します。
let arrObj = [
{
name: "张三", key: '1' },
{
name: "李四", key: '2' },
{
name: "王五", key: '3' },
{
name: "张三", key: '1' },
{
name: "李四", key: '2' }
]
function uniqueArr (arr) {
var result = []
var obj = {
}
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i].key]) {
result.push(arr[i])
obj[arr[i].key] = true
}
}
return result
}
console.log(uniqueArr(arrObj));
3. Map() メソッド
has メソッドは、指定された要素が Map オブジェクトに存在するかどうかを判断し、存在する場合は true を返し、存在しない場合は false を返します。
set メソッドは、Map オブジェクトに新しい要素を追加できます。map.set(key, value)
value メソッドは、Map オブジェクトの値のトラバーサー オブジェクトを返すことができます
let arrObj = [
{
name: "张三", key: '1' },
{
name: "李四", key: '2' },
{
name: "王五", key: '3' },
{
name: "张三", key: '1' },
{
name: "李四", key: '2' }
]
// 方法一:
let map = new Map()
for (let item of arrObj) {
if (!map.has(item.key)) {
map.set(item.key, item)
};
};
arr = [...map.values()]
console.log(arr)
// 方法二: (代码较为简洁)
const map = new Map()
const newArr = arrObj.filter(v => !map.has(v.key) && map.set(v.key, 1))
console.log(newArr);
4.reduceメソッド
let arrObj = [
{
name: "张三", key: '1' },
{
name: "李四", key: '2' },
{
name: "王五", key: '3' },
{
name: "张三", key: '1' },
{
name: "李四", key: '2' }
]
var obj = {
}
arrObj = arrObj.reduce(function (item, next) {
obj[next.key] ? '' : obj[next.key] = true && item.push(next)
return item
}, [])
console.log(arrObj);