Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用布尔值更新json数组中的重复对象_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Javascript 如何使用布尔值更新json数组中的重复对象

Javascript 如何使用布尔值更新json数组中的重复对象,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个数组的小问题。我想通过使用boolean更新object属性来识别数组中的重复对象。请参阅下面的数组 var jsonArray=[{ 技能:“Java”, 姓名:“拉维”, 检查副本:“ }, { 技能:“SAP”, 姓名:“罗伯特”, 检查副本:“ }, { 技能:“Java”, 姓名:“拉希姆”, 检查副本:“ }, { 技能:“神谕”, 姓名:“辛格”, 检查副本:“ }] 如果您看到上面的数组,SKILL:Java被复制。我想将数组更新为以下格式 var jsonArray=

我有一个数组的小问题。我想通过使用boolean更新object属性来识别数组中的重复对象。请参阅下面的数组

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”,只有一个是真的(最后一个之前的一个)