javascript在数组里面找不同的属性值组成数组
时间: 2023-08-30 07:04:04 浏览: 89
可以使用Array.prototype.reduce()方法和Array.prototype.includes()方法来实现。
假设有如下数组:
```javascript
const arr = [
{ id: 1, name: 'Tom' },
{ id: 2, name: 'Jerry' },
{ id: 3, name: 'Alice' },
{ id: 4, name: 'Bob' },
{ id: 5, name: 'Tom' }
];
```
我们要找出数组中不同的name属性值,可以使用以下代码:
```javascript
const result = arr.reduce((acc, cur) => {
if (!acc.includes(cur.name)) {
acc.push(cur.name);
}
return acc;
}, []);
console.log(result); // ["Tom", "Jerry", "Alice", "Bob"]
```
在reduce()方法中,acc代表累加器,初始值为一个空数组。cur代表当前遍历到的元素。如果当前元素的name属性值不在累加器数组中,则将其添加到累加器数组中。最后返回累加器数组即可。
相关问题
两个对象数组,把不同的找出来
假设我们有两个对象数组 arr1 和 arr2,每个对象都有一些属性。要找出 arr1 中不同于 arr2 的对象,可以使用以下步骤:
1. 遍历 arr1 中的每个对象。
2. 对于每个对象,在 arr2 中查找具有相同属性值的对象。
3. 如果找到了相同属性值的对象,则继续遍历 arr1 的下一个对象。
4. 如果没有找到相同属性值的对象,则将当前对象添加到结果数组中。
5. 遍历完 arr1 中的所有对象后,返回结果数组。
以下是一个示例代码实现:
```javascript
function findDifferentObjects(arr1, arr2) {
const result = [];
for (const obj1 of arr1) {
let found = false;
for (const obj2 of arr2) {
if (isEqual(obj1, obj2)) {
found = true;
break;
}
}
if (!found) {
result.push(obj1);
}
}
return result;
}
function isEqual(obj1, obj2) {
// 判断两个对象是否相等,略
// 可以使用 Lodash 的 isEqual 方法
}
// 示例用法
const arr1 = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }];
const arr2 = [{ id: 1, name: 'Alice' }, { id: 4, name: 'David' }];
const diff = findDifferentObjects(arr1, arr2);
console.log(diff); // [{ id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }]
```
在上面的示例中,我们定义了两个数组 arr1 和 arr2,它们包含一些对象。我们调用了 findDifferentObjects 函数,并将这两个数组作为参数传递给它。
函数执行后,返回 arr1 中不同于 arr2 的对象,即 [{ id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }]。这些对象在 arr2 中不存在,因此它们是 arr1 中的独特对象。
阅读全文