如何根据键和值比较对象数组并删除对象
How to compare array of object based on key and value and delete object
我在常量行中有以下数据。
const rows = {
"selected_parameter_value": [
{
"parameter_value": "a",
"label_value": "a"
},
{
"parameter_value": "d",
"label_value": "d"
}
]
};
我想将 const rows.selected_parameter_value
的每个对象与 parameter_value
和 this.selectedParameterContext.records[0].selected_parameter_value
的 label_value
进行比较。
并从 this.selectedParameterContext.records[0].selected_parameter_value
中删除 const rows.selected_parameter_value
中不存在的那些对象
例如-
在const rows.selected_parameter_value
中,只有a
和d
对象存在,b
和c
不存在。
所以从this.selectedParameterContext.records[0].selected_parameter_value
.
中移除参数和标签值为b和c的对象
this.selectedParameterContext = {
'records': [
{
'selected_parameter_value': [{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}]
},
{
'selected_parameter_value': [{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}]
}]
};
预期输出
this.selectedParameterContext = {
'records': [
{
'selected_parameter_value': [{
'parameter_value': 'a',
'label_value': 'a'
}]
},
{
'selected_parameter_value': [
{
'parameter_value': 'd',
'label_value': 'd',
}]
}]
};
代码下方
deleteContextData(rows ) {
const paramArray = rows.selected_parameter_value;
const newArrayData = this.selectedParameterContext.records[0].selected_parameter_value;
const removeMatchingData = (paramArray, toCompareWith) => {
return paramArray.filter(({ label_value }) => !toCompareWith.some(compareObj => compareObj.label_value === label_value));
}
console.log(removeMatchingData(paramArray, newArrayData),"newarray");
}
- 你需要循环
this.selectedParameterContext.records
- 然后在第一个循环中,第二个循环
record.selected_parameter_value
- 然后使用
rows.selected_parameter_value.find(...)
验证
- 然后使用
.splice(...)
从 this.selectedParameterContext.records
中删除项目
- 或将所需数据添加到数组
const rows = {
"selected_parameter_value": [
{
"parameter_value": "a",
"label_value": "a"
},
{
"parameter_value": "d",
"label_value": "d"
}
]
};
const selectedParameterContext = {
'records': [
{
'selected_parameter_value': [
{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}
]
},
{
'selected_parameter_value': [
{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}
]
}
]
};
selectedParameterContext.records.forEach(function(record, recordIndex) {
record.selected_parameter_value.forEach(function(parameter, parameterIndex) {
const isValid = rows.selected_parameter_value.find(function(item) {
return parameter.parameter_value === item.parameter_value && parameter.label_value === item.label_value;
});
if (!isValid) {
selectedParameterContext.records[recordIndex].selected_parameter_value.splice(parameterIndex, 1);
}
});
});
console.log('selectedParameterContext: ', selectedParameterContext);
对于新数组变量
const rows = {
"selected_parameter_value": [
{
"parameter_value": "a",
"label_value": "a"
},
{
"parameter_value": "d",
"label_value": "d"
}
]
};
const selectedParameterContext = {
'records': [
{
'selected_parameter_value': [
{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}
]
},
{
'selected_parameter_value': [
{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}
]
}
]
};
// Building new array variable
const newSelectedParameterContext = {
'records': []
};
selectedParameterContext.records.forEach(function(record, recordIndex) {
const newSelectedParameterValues = [];
record.selected_parameter_value.forEach(function(parameter, parameterIndex) {
const isValid = rows.selected_parameter_value.find(function(item) {
return parameter.parameter_value === item.parameter_value && parameter.label_value === item.label_value;
});
if (isValid) {
newSelectedParameterValues.push(parameter);
}
});
newSelectedParameterContext.records.push({'selected_parameter_value': newSelectedParameterValues});
});
console.log('newSelectedParameterContext: ', newSelectedParameterContext);
您的数据已初始化为 const
。这意味着变量是不可变的。所以我建议你这样重建。
const selectedParameterContext = {
'records': [
{
'selected_parameter_value': [{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}]
},
{
'selected_parameter_value': [{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}]
}]
};
var selectedParameterContext2 = {
'records': []
}
selectedParameterContext.records.forEach(e=>{
var records = [];
e.selected_parameter_value.forEach(f=>{
if(f.parameter_value==='a'||f.parameter_value==='d')
records.push(f)
})
selectedParameterContext2.records.push({'selected_parameter_value': records})
})
console.log(selectedParameterContext2)
我在常量行中有以下数据。
const rows = {
"selected_parameter_value": [
{
"parameter_value": "a",
"label_value": "a"
},
{
"parameter_value": "d",
"label_value": "d"
}
]
};
我想将 const rows.selected_parameter_value
的每个对象与 parameter_value
和 this.selectedParameterContext.records[0].selected_parameter_value
的 label_value
进行比较。
并从 this.selectedParameterContext.records[0].selected_parameter_value
中删除 const rows.selected_parameter_value
例如-
在const rows.selected_parameter_value
中,只有a
和d
对象存在,b
和c
不存在。
所以从this.selectedParameterContext.records[0].selected_parameter_value
.
this.selectedParameterContext = {
'records': [
{
'selected_parameter_value': [{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}]
},
{
'selected_parameter_value': [{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}]
}]
};
预期输出
this.selectedParameterContext = {
'records': [
{
'selected_parameter_value': [{
'parameter_value': 'a',
'label_value': 'a'
}]
},
{
'selected_parameter_value': [
{
'parameter_value': 'd',
'label_value': 'd',
}]
}]
};
代码下方
deleteContextData(rows ) {
const paramArray = rows.selected_parameter_value;
const newArrayData = this.selectedParameterContext.records[0].selected_parameter_value;
const removeMatchingData = (paramArray, toCompareWith) => {
return paramArray.filter(({ label_value }) => !toCompareWith.some(compareObj => compareObj.label_value === label_value));
}
console.log(removeMatchingData(paramArray, newArrayData),"newarray");
}
- 你需要循环
this.selectedParameterContext.records
- 然后在第一个循环中,第二个循环
record.selected_parameter_value
- 然后使用
rows.selected_parameter_value.find(...)
验证 - 然后使用
.splice(...)
从this.selectedParameterContext.records
中删除项目
- 或将所需数据添加到数组
const rows = {
"selected_parameter_value": [
{
"parameter_value": "a",
"label_value": "a"
},
{
"parameter_value": "d",
"label_value": "d"
}
]
};
const selectedParameterContext = {
'records': [
{
'selected_parameter_value': [
{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}
]
},
{
'selected_parameter_value': [
{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}
]
}
]
};
selectedParameterContext.records.forEach(function(record, recordIndex) {
record.selected_parameter_value.forEach(function(parameter, parameterIndex) {
const isValid = rows.selected_parameter_value.find(function(item) {
return parameter.parameter_value === item.parameter_value && parameter.label_value === item.label_value;
});
if (!isValid) {
selectedParameterContext.records[recordIndex].selected_parameter_value.splice(parameterIndex, 1);
}
});
});
console.log('selectedParameterContext: ', selectedParameterContext);
对于新数组变量
const rows = {
"selected_parameter_value": [
{
"parameter_value": "a",
"label_value": "a"
},
{
"parameter_value": "d",
"label_value": "d"
}
]
};
const selectedParameterContext = {
'records': [
{
'selected_parameter_value': [
{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}
]
},
{
'selected_parameter_value': [
{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}
]
}
]
};
// Building new array variable
const newSelectedParameterContext = {
'records': []
};
selectedParameterContext.records.forEach(function(record, recordIndex) {
const newSelectedParameterValues = [];
record.selected_parameter_value.forEach(function(parameter, parameterIndex) {
const isValid = rows.selected_parameter_value.find(function(item) {
return parameter.parameter_value === item.parameter_value && parameter.label_value === item.label_value;
});
if (isValid) {
newSelectedParameterValues.push(parameter);
}
});
newSelectedParameterContext.records.push({'selected_parameter_value': newSelectedParameterValues});
});
console.log('newSelectedParameterContext: ', newSelectedParameterContext);
您的数据已初始化为 const
。这意味着变量是不可变的。所以我建议你这样重建。
const selectedParameterContext = {
'records': [
{
'selected_parameter_value': [{
'parameter_value': 'a',
'label_value': 'a'
},
{
'parameter_value': 'b',
'label_value': 'b',
}]
},
{
'selected_parameter_value': [{
'parameter_value': 'c',
'label_value': 'c'
},
{
'parameter_value': 'd',
'label_value': 'd',
}]
}]
};
var selectedParameterContext2 = {
'records': []
}
selectedParameterContext.records.forEach(e=>{
var records = [];
e.selected_parameter_value.forEach(f=>{
if(f.parameter_value==='a'||f.parameter_value==='d')
records.push(f)
})
selectedParameterContext2.records.push({'selected_parameter_value': records})
})
console.log(selectedParameterContext2)