Javascript 如何使用布尔值更新json数组中的重复对象
我有一个数组的小问题。我想通过使用boolean更新object属性来识别数组中的重复对象。请参阅下面的数组Javascript 如何使用布尔值更新json数组中的重复对象,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个数组的小问题。我想通过使用boolean更新object属性来识别数组中的重复对象。请参阅下面的数组 var jsonArray=[{ 技能:“Java”, 姓名:“拉维”, 检查副本:“ }, { 技能:“SAP”, 姓名:“罗伯特”, 检查副本:“ }, { 技能:“Java”, 姓名:“拉希姆”, 检查副本:“ }, { 技能:“神谕”, 姓名:“辛格”, 检查副本:“ }] 如果您看到上面的数组,SKILL:Java被复制。我想将数组更新为以下格式 var jsonArray=
var jsonArray=[{
技能:“Java”,
姓名:“拉维”,
检查副本:“
}, {
技能:“SAP”,
姓名:“罗伯特”,
检查副本:“
}, {
技能:“Java”,
姓名:“拉希姆”,
检查副本:“
}, {
技能:“神谕”,
姓名:“辛格”,
检查副本:“
}]
如果您看到上面的数组,SKILL:Java
被复制。我想将数组更新为以下格式
var jsonArray=[{
技能:“Java”,
姓名:“拉维”,
检查重复:正确
}, {
技能:“SAP”,
姓名:“罗伯特”,
检查重复:错误
}, {
技能:“Java”,
姓名:“拉希姆”,
检查重复:错误
}, {
技能:“神谕”,
姓名:“辛格”,
检查重复:错误
}]
有人能帮我得到那个要求吗
jsonArray.map(item => ({
...item,
checkDuplicate: jsonArray.filter(jsonArrayItem => jsonArrayItem.SKILL == item.SKILL).length>1
}))
输出:
[
{
"SKILL": "Java",
"name": "ravi",
"checkDuplicate": true
},
{
"SKILL": "SAP",
"name": "robert",
"checkDuplicate": false
},
{
"SKILL": "Java",
"name": "rahim",
"checkDuplicate": true
},
{
"SKILL": "Oracle",
"name": "singh",
"checkDuplicate": false
}
]
[
{"SKILL":"Java","name":"ravi","checkDuplicate":true},
{"SKILL":"SAP","name":"robert","checkDuplicate":false},
{"SKILL":"Java","name":"rahim","checkDuplicate":false},
{"SKILL":"Oracle","name":"singh","checkDuplicate":false}
]
输出:
[
{
"SKILL": "Java",
"name": "ravi",
"checkDuplicate": true
},
{
"SKILL": "SAP",
"name": "robert",
"checkDuplicate": false
},
{
"SKILL": "Java",
"name": "rahim",
"checkDuplicate": true
},
{
"SKILL": "Oracle",
"name": "singh",
"checkDuplicate": false
}
]
[
{"SKILL":"Java","name":"ravi","checkDuplicate":true},
{"SKILL":"SAP","name":"robert","checkDuplicate":false},
{"SKILL":"Java","name":"rahim","checkDuplicate":false},
{"SKILL":"Oracle","name":"singh","checkDuplicate":false}
]
因此,根据评论,类似的方法应该可以奏效:
var jsonArray = [{
SKILL: "Java",
name: "ravi",
checkDuplicate: ""
}, {
SKILL: "SAP",
name: "robert",
checkDuplicate: ""
}, {
SKILL: "Java",
name: "rahim",
checkDuplicate: ""
}, {
SKILL: "Oracle",
name: "singh",
checkDuplicate: ""
}]
// We need an helper function that works similar to both
// array's `find`:
// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find>
//
// and `indexOf`:
// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf>
//
const find = (array, predicate, fromIndex) => {
for (let i = fromIndex; i < array.length; i++) {
if (predicate(array[i], i)) {
return true;
}
}
return false;
}
// Here the main loop, we also declare a `dupes` object to keep
// track of the duplicated `SKILL`
for (let dupes = {}, i = 0; i < jsonArray.length; i++) {
let {SKILL} = jsonArray[i];
// increment using negate + NOT
dupes[SKILL] = -~dupes[SKILL];
// Here we mutate the array, and we set `true`
// only if it's the first time we encounter this `SKILL`
// and if there are items with the same `SKILL` after
// the current item
jsonArray[i].checkDuplicate = dupes[SKILL] === 1 && find(jsonArray, item => item.SKILL === SKILL, i + 1);
}
jsonArray
var jsonArray=[{
技能:“Java”,
姓名:“拉维”,
检查副本:“
}, {
技能:“SAP”,
姓名:“罗伯特”,
检查副本:“
}, {
技能:“Java”,
姓名:“拉希姆”,
检查副本:“
}, {
技能:“神谕”,
姓名:“辛格”,
检查副本:“
}]
//我们需要一个类似于两者的助手函数
//数组的“查找”:
//
//
//和“indexOf”:
//
//
常量find=(数组、谓词、fromIndex)=>{
for(设i=fromIndex;iitem.SKILL==SKILL,i+1);
}
杰索纳雷
您必须修改它,它不应该是第三个标记为“重复”的元素…?@ZER0,是的。即使三个技能是重复的,我们只需要一个技能是真的,另外两个技能必须是假的。谢谢你的帮助。这里两个Java对象都被更新为true,我不希望这样。。只有一个对象必须更新为true,另一个对象应该为false。好吧,那么如果有三个技能具有相同的值呢?仍然只有遇到的第一个应该设置为true
,另外两个设置为false
?请检查我的其他答案,现在可以了,我只是添加了一个过滤器()来检查下一个元素中是否存在当前元素elements@ZER0是 啊即使三个技能重复,只有一个技能需要为真,其他两个技能必须为假。好的,然后你可以使用我的另一个答案,将“长度>0”替换为“长度==1”,只有一个是真的(最后一个之前的一个)