一个数组里若干个对象
[
{
id: 1,
keyValue: "1:1"
nameValue: "aws:RequestHeader"
operateValue: "StringEquals"
},
{
id: 2,
keyValue: "2:2"
nameValue: "aws:RequestHeader"
operateValue: "StringEquals"
},
{
id: 3,
keyValue: "a:a"
nameValue: "aws:RequestHeader"
operateValue: "StringNotEquals"
}
]
当几个对象做比较的时候,operateValue的值如果一样
就将两个operateValue一样的对象里的keyValue 放在一个对象里
那么最终得到的结果就是
{
id: 1, // 任意id都可以
StringEquals: {"1": "1", "2": "2"},
StringNotEquals: {"a": "a"}
}
请问怎么处理?谢谢了!!
给个实现方案,看是否符合要求:
data = [
{
id: 1,
keyValue: "1:1",
nameValue: "aws:RequestHeader",
operateValue: "StringEquals"
},
{
id: 2,
keyValue: "2:2",
nameValue: "aws:RequestHeader",
operateValue: "StringEquals",
},
{
id: 3,
keyValue: "a:a",
nameValue: "aws:RequestHeader",
operateValue: "StringNotEquals"
}
]
obj = {
id : 1,
StringEquals: {},
StringNotEquals: {}
}
for(let d in data){
console.log(d)
let key = data[d].keyValue.split(":")[0];
let value = data[d].keyValue.split(":")[1];
if(data[d].operateValue=='StringEquals'){
obj.StringEquals[key] = value;
}else{
obj.StringNotEquals[key] = value;
}
}
console.log(obj);
let obj1 = [{
id: 1,
keyValue: "1:1",
nameValue: "aws:RequestHeader",
operateValue: "StringEquals",
},
{
id: 2,
keyValue: "2:2",
nameValue: "aws:RequestHeader",
operateValue: "StringEquals",
},
{
id: 3,
keyValue: "a:a",
nameValue: "aws:RequestHeader",
operateValue: "StringNotEquals",
}
]
function newSet(obj) {
let newObj = {}
for (let i = 0; i < obj.length; i++) {
for (let j = i; j < obj.length; j++) {
//判断循环是否第一次进入
if (j == i) {
newObj[obj[j].operateValue] = {}
let arr = obj[j].keyValue.split(':')
newObj[obj[j].operateValue][arr[0]] = arr[1]
}
//判断第二次进入,两次的operateValue是否相等
if (obj[i].operateValue == obj[j].operateValue && j != i) {
let arr = obj[j].keyValue.split(':')
newObj[obj[j].operateValue][arr[0]] = arr[1]
obj.splice(j,1)
}
}
}
return newObj
}
console.log(newSet(obj1))