这个问题可能是一个简单的迭代,但我陷入了逻辑。
我有一个需要根据 id 和 code 进行迭代的数据数组,并且仅在给定id中不存在代码时才删除数据。 / p>
这是案例方案, 根据以下数据,
在这里,我想根据情况3删除此数据。
{
"id" : 378,
"code" : "TWITTER",
"comment" : "zeeer"
}
有人可以在这种情况下帮助我吗?
****下面是原始数组数据****
data = [ {
"id" : 381,
"code" : "GOOGLE",
"comment" : "ffff"
}, {
"id" : 381,
"code" : "FACEBOOK",
"comment" : "fff"
}, {
"id" : 378,
"code" : "TWITTER",
"comment" : "zeeer"
}, {
"id" : 378,
"code" : "GOOGLE",
"comment" : "rferer"
}, {
"id" : 378,
"code" : "FACEBOOK",
"comment" : "fefehh"
} ]
我在下面尝试了一些方法,但是不确定在此之后如何进行。
而且,我使用的是angular 7,如果我得到基于打字稿的解决方案,将会很有帮助。
this.data.forEach((row, index) => {
let value = row.id;
if(originalArray.indexOf(value) == -1) {
console.log(value);
}
originalArray.push(row);
})
答案 0 :(得分:1)
尝试一下:
data = [ {
"id" : 381,
"code" : "GOOGLE",
"comment" : "ffff"
}, {
"id" : 381,
"code" : "FACEBOOK",
"comment" : "fff"
}, {
"id" : 378,
"code" : "TWITTER",
"comment" : "zeeer"
}, {
"id" : 378,
"code" : "GOOGLE",
"comment" : "rferer"
}, {
"id" : 378,
"code" : "FACEBOOK",
"comment" : "fefehh"
} ]
var result = data.reduce((unique, o) => {
if(data.filter(obj => obj.id != o.id && obj.code === o.code).length>=1) {
unique.push(o);
}
return unique;
},[]);
console.log(result);
答案 1 :(得分:1)
“删除任何不匹配的代码+ ID对”的逻辑似乎与您的前两种情况直接矛盾,因为这些对不匹配 -ID不同。
无论如何,下面的代码将只保留重复的code
与不同的id
的项目。
const data = [ { "id" : 381, "code" : "GOOGLE", "comment" : "ffff" }, { "id" : 381, "code" : "FACEBOOK", "comment" : "fff" }, { "id" : 378, "code" : "TWITTER", "comment" : "zeeer" }, { "id" : 378, "code" : "GOOGLE", "comment" : "rferer" }, { "id" : 378, "code" : "FACEBOOK", "comment" : "fefehh" } ];
let result = data.filter(({id,code}) => !!data.find(obj => obj.code === code && obj.id !== id));
console.log(result);
理想情况下,您在这里不需要嵌套的数组方法,而是需要一个查找/哈希图来防止不必要的迭代,但是看到您已经接受了一个答案,我现在就放弃。
答案 2 :(得分:0)
和Lodash
const data = [ {
"id" : 381,
"code" : "GOOGLE",
"comment" : "ffff"
}, {
"id" : 381,
"code" : "FACEBOOK",
"comment" : "fff"
}, {
"id" : 378,
"code" : "TWITTER",
"comment" : "zeeer"
}, {
"id" : 378,
"code" : "GOOGLE",
"comment" : "rferer"
}, {
"id" : 378,
"code" : "FACEBOOK",
"comment" : "fefehh"
} ];
const groupedData = _.groupBy(data, 'code'); // import * as _ from 'lodash'
console.log(data.filter(entry => groupedData[entry.code].length > 1));
结果:
[Object, Object, Object, Object]
0: Object
code: "GOOGLE"
comment: "ffff"
id: 381
__proto__: Object
1: Object
code: "FACEBOOK"
comment: "fff"
id: 381
__proto__: Object
2: Object
code: "GOOGLE"
comment: "rferer"
id: 378
__proto__: Object
3: Object
code: "FACEBOOK"
comment: "fefehh"
id: 378
__proto__: Object