[英]Filter object array against another object array
我有兩個這樣簡化的數組。
var a = [{
number: 1,
name: "A"
}, {
number: 2,
name: "B"
}, {
number: 3,
name: "C"
}, {
number: 4,
name: "D"
}, {
number: 5,
name: "E"
}, {
number: 6,
name: "F"
}];
var b = [{
number: 3,
name: "C"
}, {
number: 6,
name: "F"
}];
我想要的是返回一個數組,其中a針對b進行過濾。 結果就是這樣。
var result = [{
number: 1,
name: "A"
}, {
number: 2,
name: "B"
}, {
number: 4,
name: "D"
}, {
number: 5,
name: "E"
}];
在堆棧溢出中查看了很多其他解決方案,但無法使其正常工作。
我可以使用下划線之類的庫。
通過單行解決方案用lodash
可以實現。
var a = [{ number: 1, name: "A" }, { number: 2, name: "B" }, { number: 3, name: "C" }, { number: 4, name: "D" }, { number: 5, name: "E" }, { number: 6, name: "F" }]; var b = [{ number: 3, name: "C" }, { number: 6, name: "F" }]; var result = _.differenceWith(a, b, _.isEqual); console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
您可以使用Array#filter 。 像這樣:
const filterData = (a,b) => {
return a.filter( (itemA) => {
return b.some( (itemB) => {
return (itemA.number === itemB.number);
});
});
}
我只是創建了一個小提琴來測試代碼: https : //jsfiddle.net/mrlew/pb1qqeyd/3/ (您必須打開控制台來檢查結果)。
或者...單行:
const filterData = (a,b) => a.filter( (itemA) => b.some( (itemB) => (itemA.number === itemB.number) ) );
編輯 :感謝@kzh建議,已編輯使用.some 。
var a = [{
number: 1,
name: "A"
}, {
number: 2,
name: "B"
}, {
number: 3,
name: "C"
}, {
number: 4,
name: "D"
}, {
number: 5,
name: "E"
}, {
number: 6,
name: "F"
}];
var b = [{
number: 3,
name: "C"
}, {
number: 6,
name: "F"
}];
var _ = require('lodash');
var result = _.differenceBy(a,b,'name');
有關更多信息,請參閱Lodash文檔: https ://lodash.com/docs/#differenceBy
您可以使用JavaScript中的內置filter
功能來過濾另一個數組,請檢查以下代碼段。
var a = [{ number: 1, name: "A" }, { number: 2, name: "B" }, { number: 3, name: "C" }, { number: 4, name: "D" }, { number: 5, name: "E" }, { number: 6, name: "F" }]; var b = [{ number: 3, name: "C" }, { number: 6, name: "F" }]; var result = a.filter(function(currentValue, index, arr) { var found = false; for (var i = 0; i < b.length; i++) { if (currentValue.number === b[i].number) { found = true; break; } } if (!found) { return currentValue; } }); console.log(result);
您可以使用普通JavaScript使用filter()
, some()
和every()
來做到這一點。
var a = [{"number":1,"name":"A"},{"number":2,"name":"B"},{"number":3,"name":"C"},{"number":4,"name":"D"},{"number":5,"name":"E"},{"number":6,"name":"F"}] var b = [{"number":3,"name":"C"},{"number":6,"name":"F"}] var result = a.filter(function(o) { return !b.some(function(e) { return Object.keys(o).length == Object.keys(e).length && Object.keys(o).every(function(k) { return e[k] == o[k] }) }) }) console.log(result)
var v1 = JSON.parse(a);
var v2 = JSON.parse(b);
var v3 = [] ;
function objectEquals(v1, v2) {
if (typeof(v1) !== typeof(v2)) {
return false;
}
if (v1 instanceof Object && v2 instanceof Object) {
for (k in v1) {
r = objectEquals(v1[k], v2[k]);
if (!r) {
v3.push(v1[k]);
}
}
}
}
// call the above method passing your two object, and return a new unique array
objectEquals(v1, v2) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.