我有两个数组:
var listOfObjects = [{ "name": "A", "data": [{'value1':'1','value2':'2'}] },
{ "name": "B", "data": [{'value1':'','value2':''}] }];
var markedImage = ["A","B","C"];
这是我的代码:
function checkData() {
var invalidDoc = [];
for (var i = 0; i < listOfObjects.length; i++) {
for (var j = 0; j < markedImage.length; j++) {
if (listOfObjects[i].name== markedImage[i]) {
for (var k = 0; k < listOfObjects[i].data.length; k++) {
if (listOfObjects[i].data[k] == "") {
var invalidfile = markedImage.indexOf(listOfObjects[i].name);
invalidDoc.push(invalidfile);
break;
} else {
var valid = markedImage.indexOf(listOfObjects[i].name);
validDoc.push(valid);
}
}
} else {
var invalidfile = markedImage.indexOf(listOfObjects[i].name);
invalidDoc.push(invalidfile);
}
}
}
}
我想做的是检查两个数组。
首先检查的是:如果 markedImage
中的项目在 listOfObjects
中不存在,则将 markedImage
的索引插入 invalidDoc
.
第二个检查是:listOfObjects 的数据不能为空,如果为空则将 markedImage
的索引推送到 invalidDoc
中。
例如,
invalidDoc
的预期结果是 [1,2]。由于listOfObjects
中的“B”数据为空,因此listOfObjects
中不存在“C”。 1和2是markedImage
中“B”和“C”的索引。
最佳答案
检查这个例子。我用了reduce使用 markedImage
数组查找 listOfObjects
中不存在的元素并检查 data
数组。
isDataEmpty
是一个对每个data
数组进行验证的函数。您可以根据所需的结果更改其逻辑。
var listOfObjects = [{ "name": "A", "data": [{'value1':'1','value2':'2'}]}, //not empty
{ "name": "B", "data": [{'value1':'','value2':''}]}, //empty
{ "name": "D", "data": []}, //empty
{ "name": "E", "data": [{'value1':'1','value2':'2'}]}, //not empty
{ "name": "G"}, //empty
{ "name": "H", "data": [{'value1':'','value2':''},
{'value1':'1','value2':'2'}]}];//empty
var markedImage = ["A","B","C", "D", "E", "F", "G", "H"];
function isDataEmpty(data) {
// You can add any validation conditions here.
// I assume that your data is an array and that by empty
// data you mean that array may be empty, undefined,
// or have some objects with empty 'value1' or 'value2'
return !data ||
data.length === 0 ||
data.some(function(d){return d.value1 === "" || d.value2 === ""});
};
function find(array, name) {
for (var i in array) {
if (array[i].name === name) return array[i];
}
return null;
}
var invalidDoc = markedImage.reduce(function(acc, cur, i) {
var found = find(listOfObjects, cur);
if (!found || isDataEmpty(found.data)) {
acc.push(i);
}
return acc;
},[]);
console.log(invalidDoc);
关于javascript - 如何在javascript中for循环检查数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48655030/