javascript 数组重复-JavaScript 如何比较字段

2023-08-26 0 4,288 百度已收录

JavaScript比较字段的方式1.比较两个对象字段,删除重复,根据属性合并对象

我们确实需要比较两个不同的对象字段javascript 数组重复,并希望在两个对象匹配某个属性值时合并这两个对象。 可以使用filter()方式来实现。

filter() 方法创建一个新的链表,其中所有元素都通过所提供函数实现的测试。

让我们创建测试数据:

let array1 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 }
];
let array2 = [
{ id: "53", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建这个函数

let res = array2.filter(val =>
    array1.some(({
        value
    }) => (val.value as any) === (value as any))
);
console.log("1", JSON.stringify(res));
//[{"id":"53","active":"a","value":10},{"id":"51","active":"a","value":11}]

2.比较两个对象字段,合并并更新值(假设链表3、4共享相同的ID)

有时我们确实需要将两个不同的属性与新的属性值合并。 我们可以使用 map() 创建一组新的对象字段,并且可以在更新新值之前使用 find() 来匹配特定属性。

map() 方法创建一个新字段,其中填充对被调用字段中的每个元素调用所提供函数的结果。

find() 方法返回所提供字段中满足所提供测试函数的第一个元素的值。 如果没有值满足测试函数javascript 数组重复,则返回 undefined。

让我们创建测试数据:

let array3 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 }
];
let array4 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建这个函数:

let arr = [];
array3.map(id =>
    arr.push({
        id: id.id,
        newValue: array4.find(o => o.id === id.id).value + 2
    })
);
console.log("2", JSON.stringify(arr));
//[{"id":"50","newValue":12},{"id":"51","newValue":13}]

3. 比较对象字段并找到独特的对象

javascript 数组重复-JavaScript 如何比较字段

如果我们想要比较两个对象字段并检测其中哪些是唯一对象,我们可以使用filter()来实现此功能。

让我们创建测试数据:

const array5 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 }
];
const array6 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 },
{ id: "52", active: "a", value: 13 }
];

让我们创建这个函数:

const ids = array5.map(e => e.id);
let filtered = array6.filter(e => ids.includes(e.id));
console.log("3", JSON.stringify(filtered));
//[{"id":"50","active":"a","value":12},{"id":"51","active":"a","value":15}]

4. 根据匹配值比较和更新属性

当我们想要比较两个对象字段并根据匹配值更新特定属性时,可以使用此类函数。

让我们创建测试数据:

const array7 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 }
];
const array8 = [{ id: "50", active: "a", value: 12 }];

让我们创建这个函数:

const idSet = new Set(array8.map(o => o.id));
const res1 = array7.map(o => ({ ...o, value: idSet.has(o.id) ? "0" : o.value }));
console.log("4", JSON.stringify(res1));
//[{"id":"50","active":"a","value":"0"},{"id":"51","active":"a","value":15}]

5. 比较两个字段对象并得出差异

当我们想要比较两个不同的对象字段并获得它们之间的差异时,可以使用这种函数。

让我们创建测试数据:

let a = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 }
];
let b = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建这个函数:

let valuesArray1 = a.reduce(function(a, c) {
    a[c.value] = c.value;
    return a;
}, {});
let valuesArray2 = b.reduce(function(a, c) {
    a[c.value] = c.value;
    return a;
}, {});
var result = a
    .filter(function(c) {
        return !valuesArray2[c.value];
    })
    .concat(
        b.filter(function(c) {
            return !valuesArray1[c.value];
        })
    );
console.log("5", result);
//[{"id":"52","active":"a","value":13}]
//shorthand
let ab = b.filter(o => !a.find(o2 => o.id === o2.id));
console.log("6", ab);

6. 合并两个比较对象数组并删除重复项

如果我们需要比较两个对象字段并从中删除重复项并合并两个字段,则可以使用此技巧。

让我们创建测试数据:

let arr1 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 }
];
let arr2 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建这个函数:

const arr1IDs = new Set(arr1.map(({ id }) => id));
const combined = [...arr1, ...arr2.filter(({ id }) => !arr1IDs.has(id))];
console.log(JSON.stringify(combined));
//[{"id":"50","active":"a","value":10},{"id":"51","active":"a","value":11},{"id":"52","active":"a","value":13}]

7.洛达什

javascript 数组重复-JavaScript 如何比较字段

Lodash 支持 _differenceBy 和 _differenceWith 技术来查找两个字段之间的差异。

let lodashtest1 = [{ id: "50" }, { id: "51" }];
let lodashtest2 = [{ id: "50" }, { id: "51" }, { id: "52" }];
let lodashresult = _.differenceBy(lodashtest2, lodashtest1, "id");
console.log("7", JSON.stringify(lodashresult));
//[{"id":"52"}]
let dif = _.differenceWith(lodashtest2, lodashtest1, _.isEqual);
console.log("8",JSON.stringify(dif));
//[{"id":"52"}]

8. 比较对象并找到独特的值

当我们使用嵌套对象时,有时很难弄清楚如何迭代和比较两个嵌套对象并获取其中的一些唯一对象。 我们可以使用Object.keys和Object.values来进行迭代。

让我们创建测试数据:

let obj1 = {
val1: "test",
stream: { prop1: false, prop2: true }
};
let obj2 = {
val1: "test",
stream: { prop1: true, prop2: true }
};
interface Data {
stream: { [key: string]: boolean };
}

让我们创建这个函数:

function objFilter(objA: Data, objB: Data): Data {
let out: Data = { stream: {} };
Object.keys(objA.stream).filter((value, idx) =>
Object.values(objA.stream)[idx] === Object.values(objB.stream)[idx]
? (out.stream[value] = Object.values(objA.stream)[idx])
: false
);
return out;
}
console.log(JSON.stringify(objFilter(obj1, obj2))); //prop2
//{"stream":{"prop2":true}}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript 数组重复-JavaScript 如何比较字段 https://www.wkzy.net/game/163418.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务