我想基于包含对象的现有数组获得2个新数组。 (每个对象的键保持不变)
newArray1对象的值应该是唯一的。换句话说:
[
{Layer:"Layer",LayerName:"foo",LayerWidth:200,LayerHeight:400},
{Layer:"Layer",LayerName:"FOOBAR",LayerWidth:200,LayerHeight:400},
{Layer:"Layer",LayerName:"foo",LayerWidth:200,LayerHeight:400}
]
newArray1应该包含第1个和第2个对象,因为3rd具有与第1个对象相同的对象值。
newArray2应该包含所有其他对象,这些对象不在newArray1中,(仅限第三个对象)
arr = []
for(var i=0;i<allSymbols.length;i++){
var obj={
Layer: allSymbols(i),
LayerName: allSymbols(i).name(),
LayerWidth: allSymbols(i).width(),
LayerHeight: allSymbols(i).height()
}
arr.push(obj)
}
// filter so far...
for(var u=0;u<arr.length;u++){
var filter = arr[u];
arr = arr.filter(function(item){
for(var key in filter){
if(item[key] == filter[key]){
return true
}
}
return false
});
}
// output newArray1(arr)?
// output newArray2?
&#13;
答案 0 :(得分:1)
您可以尝试这样的事情:
var d = [{Layer:"Layer",LayerName:"foo",LayerWidth:200,LayerHeight:400},{Layer:"Layer",LayerName:"FOOBAR",LayerWidth:200,LayerHeight:400},{Layer:"Layer",LayerName:"foo",LayerWidth:200,LayerHeight:400}]
var dupes = [];
var unique = [];
d.forEach(function(c,i,a){
var objStr = JSON.stringify(c);
var index = a.findIndex(function(o){
return JSON.stringify(o) === objStr;
});
var _filter = a.filter(function(o){
return JSON.stringify(o) === objStr;
});
if(_filter.length === 1 || index === i){
unique.push(c)
}
else{
dupes.push(c);
}
}, []);
console.log(dupes, unique)
&#13;
答案 1 :(得分:1)
您可以检查重复的对象并过滤给定的数据。
var data = [{ Layer: "Layer", LayerName: "foo", LayerWidth: 200, LayerHeight: 400 }, { Layer: "Layer", LayerName: "FOOBAR", LayerWidth: 200, LayerHeight: 400 }, { Layer: "Layer", LayerName: "foo", LayerWidth: 200, LayerHeight: 400 }],
array1 = [],
array2 = data.filter(function (a) {
return array1.some(function (b) {
return Object.keys(a).length === Object.keys(b).length && Object.keys(a).every(function (k) {
return a[k] === b[k];
});
}) || array1.push(a) && false;
});
console.log(array1);
console.log(array2);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;