我有2个数组,其中可能包含对象数组或仅数组值。
就像下面一样。
数组值结构。
enums.php
或
a = [{value : 'xyz' , label : 'xyz'} , {value : 'pqr' , label :'pqr'} ]
或
a = ["abc" , "pqr"]
另一种数组结构将与第一个相同。
如何从两个数组中获取不同的值。
a = ["xyz"]
注意:我不能使用任何库。
任何帮助都会很棒。
谢谢。
答案 0 :(得分:1)
如果对象或值的结构相同,则可以采用Set
和字符串化的值(由于对象的不同),并为相同的字符串化值过滤数组。
function getDifference(a, b) {
var setB = new Set(b.map(o => JSON.stringify(o)));
return a.filter(o => !setB.has(JSON.stringify(o)));
}
console.log(getDifference(["abc" , "pqr"], ["pqr"]));
console.log(getDifference(
[{ value: 'xyz', label: 'xyz' }, { value: 'pqr', label: 'pqr' } , { value: 'abc', label:'abc' }],
[{ value: 'xyz', label: 'xyz' }, { value: 'pqr', label: 'pqr' }]
));
要获得对称的差异,您需要使用切换数组再次调用该函数。
function getSymDifference(a, b) {
return getDifference(a, b).concat(getDifference(b, a));
}
function getDifference(a, b) {
var setB = new Set(b.map(o => JSON.stringify(o)));
return a.filter(o => !setB.has(JSON.stringify(o)));
}
console.log(getSymDifference(["abc" , "pqr"], ["pqr", "xyz"]));
console.log(getSymDifference(
[{ value: 'xyz', label: 'xyz' }, { value: 'pqr', label: 'pqr' } , { value: 'abc', label:'abc' }],
[{ value: 'xyz', label: 'xyz' }, { value: 'pqr', label: 'pqr' }, { value: '111', label: '222' }]
));
答案 1 :(得分:0)
使用filter
:
const array1 = [{value : 'xyz' , label : 'xyz'} , {value : 'pqr' , label :'pqr'} , {value : 'abc' , label :'abc'}];
const array2 = [{value : 'xyz' , label : 'xyz'} , {value : 'pqr' , label :'pqr'}];
const res = array1.filter(e => array2.find(f => JSON.stringify(f) != JSON.stringify(e)));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
答案 2 :(得分:0)
您可以创建所有唯一值的Set
。您可以检查该项目是否为object
。如果是,则获取label属性,否则使用项目本身:
function getMerged(array1, array2) {
// get unique values from both array
const set = new Set(array1.map(a => typeof a === 'object' ? a.label : a));
array2.forEach(a => set.add(typeof a === 'object' ? a.label : a));
// create an array of objects from the unique values
return [...set].map(value => ({ label: value, value }))
}
console.log(getMerged(["abc" , "pqr"], [{value : 'xyz' , label : 'xyz'} , {value : 'pqr' , label :'pqr'} ]))