我在数组中有多个对象。它在对象中具有值属性的value数组。当所有值属性都为空时。我想删除整个对象。
我试了但是我无法产生输出。 请帮帮我。
var data = [
{
"field": "surname",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [
{
"id": "drivingLicenseFront",
"value": "25.07.1974",
"isAvailable": true
},
{
"id": "passport",
"value": "05 JUN /JOIN 57",
"isAvailable": true
}
],
"status": "passed"
}
];
for (let x = data.length-1; x >= 0; x--) {
let count = 1;
var dataValueLength = data[x].values.length;
for (let y = 0; y < data[x].values.length; y++) {
if (data[x].values[y].value === "") {
count++;
}
}
if (dataValueLength == count) {
data.splice(x, 1)
}
}
console.log(JSON.stringify(data));
在上面的场景中,输出应该只是一个“出生日期”的对象。
答案 0 :(得分:4)
非常接近,只有一个问题(您要将count
初始化为1
而不是0
),请将其设为
let count = 0;
<强>演示强>
var data = [{
"field": "surname",
"values": [{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [{
"id": "drivingLicenseFront",
"value": "25.07.1974",
"isAvailable": true
},
{
"id": "passport",
"value": "05 JUN /JOIN 57",
"isAvailable": true
}
],
"status": "passed"
}
];
for (let x = data.length - 1; x >= 0; x--) {
let count = 0; //Observe change in this line
var dataValueLength = data[x].values.length;
for (let y = 0; y < data[x].values.length; y++) {
if (data[x].values[y].value === "") {
count++;
}
}
if (dataValueLength == count) {
data.splice(x, 1)
}
}
console.log(JSON.stringify(data));
答案 1 :(得分:2)
您可以使用reduce
过滤掉没有values
var data = [
{
"field": "surname",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [
],
"status": "passed"
}
];
var result = data.reduce(function(p,c){
if(c.values && c.values.length > 0)
p.push(c);
return p;
},[]);
console.log(result);
答案 2 :(得分:2)
如果我正确理解您的问题,您可以使用filter()
:
var filtered = data.filter(item => item.values.some(v => v.value))
这将返回一个数组,删除所有values.value
为假(y)的项目。
var data = [
{
"field": "surname",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [
{
"id": "drivingLicenseFront",
"value": "25.07.1974",
"isAvailable": true
},
{
"id": "passport",
"value": "05 JUN /JOIN 57",
"isAvailable": true
}
],
"status": "passed"
}
];
var filtered = data.filter(item => item.values.some(v => v.value))
console.log(filtered)
&#13;
答案 3 :(得分:1)
您可以使用Array.prototype.filter
和Array.prototype.every
filter
创建一个包含所提供的lambda返回True的所有元素的新数组every
确定数组中的每个元素是否为提供的lambda 所以我们要过滤对象每个 value
(在values
数组中)不等于空字符串
const data1 =
data.filter (o =>
o.values.every (v => v.value !== ''))
完整演示
const data0 = [
{
"field": "surname",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [
{
"id": "drivingLicenseFront",
"value": "25.07.1974",
"isAvailable": true
},
{
"id": "passport",
"value": "05 JUN /JOIN 57",
"isAvailable": true
}
],
"status": "passed"
}
];
const data1 =
data0.filter (f =>
f.values.every (v => v.value !== ''))
console.log (data1)
// [
// {
// "field": "date of birth",
// "values": [
// {
// "id": "drivingLicenseFront",
// "value": "25.07.1974",
// "isAvailable": true
// },
// {
// "id": "passport",
// "value": "05 JUN /JOIN 57",
// "isAvailable": true
// }
// ],
// "status": "passed"
// }
// ]
&#13;
答案 4 :(得分:0)
从0开始计数并正确计数:)
https://jsfiddle.net/vLLs4px5/
var data = [
{
"field": "surname",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [
{
"id": "drivingLicenseFront",
"value": "25.07.1974",
"isAvailable": true
},
{
"id": "passport",
"value": "05 JUN /JOIN 57",
"isAvailable": true
}
],
"status": "passed"
}
];
for (let x = data.length-1; x >= 0; x--) {
var count = 0;
var dataValueLength = data[x].values.length;
for (let y = 0; y < data[x].values.length; y++) {
if (data[x].values[y].value == "") {
count = count + 1;
}
}
if (dataValueLength == count) {
data.splice(x, 1)
}
}
console.log((data));
答案 5 :(得分:0)
您可以使用forEach
let counter = 0;
data.forEach(function(el) {
let isEmpty = true;
let element = el.values
element.forEach(function(e)) {
if (e.value != "") {
isEmpty = false;
}
});
if (!isEmpty) {
data.splice(counter, 1);
}
counter++;
});
答案 6 :(得分:0)
如果您需要此代码不会因意外输入而崩溃或删除任何具有falsy值属性的值项,您可以尝试这样做:
var data = [
null,
undefined,
{},
{values:"hello world"},
{
"field": "surname",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "given names",
"values": [
{
"id": "drivingLicenseFront",
"value": "",
"isAvailable": true
},
{
"id": "passport",
"value": "",
"isAvailable": true
}
],
"status": "passed"
},
{
"field": "date of birth",
"values": [
{
"id": "drivingLicenseFront",
"value": "25.07.1974",
"isAvailable": true
},
{
"id": "passport",
"value": "05 JUN /JOIN 57",
"isAvailable": true
},
{
"id": "this is gone",
"value": "",
"isAvailable": true
}
],
"status": "passed"
}
];
data.map(
data=>
Object.assign(
{},
(data||{}),
{
values:Array.from((data&&data.values)||[])
.filter(
value=>
(value&&value.value)
)
}
)
)
.filter(
data=>
data.values.length!==0
)