我的数据如下:
var data = [
{item1: 123, item2: "name", item3: "id"},
{item1: 234, item2: "other"},
{item1: 456, item2: "another"},
{item1: 789, item2: "again"}
]
如何循环查找item3是否存在,如果不存在,请填写。
答案 0 :(得分:2)
您可以使用正常的for循环迭代数组元素,也可以使用functional approach。
var data = [
{item1: 123, item2: "name", item3: "id"},
{item1: 234, item2: "other"},
{item1: 456, item2: "another"},
{item1: 789, item2: "again"}
];
// 1. Using Array.foreach:
data.forEach(function(element) {
if (!element.hasOwnProperty('item3')) element.item3 = "default";
});
// 2. Using Array.map:
data = data.map(function(element) {
if (!element.hasOwnProperty('item3')) element.item3 = "default";
return element;
});
// 3. Using a for-loop:
for (var i = 0, length = data.length; i < length; ++i) {
if (!data[i].hasOwnProperty('item3')) data[i].item3 = "default";
}
console.log(data);
&#13;
如果您不想保留原始数据阵列,我建议使用1或2.
Chrome 48上的效果(类似于Firefox 44,运行100000次):
可能的解释:由于Array.foreach()和Array.map()回调不引用传递参数之外的任何内容,现代JIT可以缓存传递的内联函数,并且优于传统的for循环。
答案 1 :(得分:1)
data.forEach(function (item) {
if (item.item3 == undefined) item.item3 = "filled with something"
});
答案 2 :(得分:1)
您可以使用for循环按顺序迭代每个项目。
for(var i = 0; i < data.length; i++) {
//check to see if item3 is NOT there
if(typeof data[i].item3 === 'undefined') {
data[i].item3 = 'default value';
}
}
答案 3 :(得分:1)
使用简单的for...of
循环:
for (const element of data) {
if (!("item3" in element)) {
element.item3 = "something"
}
}
答案 4 :(得分:1)
迭代并检查密钥是否存在。
var data = [
{ item1: 123, item2: "name", item3: "id" },
{ item1: 234, item2: "other" },
{ item1: 456, item2: "another" },
{ item1: 789, item2: "again" }
]
function fillIn(data, key, value)
{
for(var i = 0, numRows = data.length; i < numRows; ++i)
{
if(!(key in data[i])) data[i][key] = value;
}
}
fillIn(data, "item3", "dingo");
答案 5 :(得分:1)
尝试以下循环:
for (var i = 0; i < data.length; i++){
for (var item in data[i]){
if (item == "item3"){
console.log("found");
}
}
}
答案 6 :(得分:0)
for(var elem in data){
var isPresent = 0;
for(var key in data[elem]){
if(key == "item3"){
isPresent = 1;
}
}
if(!isPresent){
//Whatever function you need
}
这应该是它。
答案 7 :(得分:0)
虽然规范是针对没有item3
的对象进行过滤,但我建议使用Array#filter
。
var data = [{ item1: 123, item2: "name", item3: "id" }, { item1: 234, item2: "other" }, { item1: 456, item2: "another" }, { item1: 789, item2: "again" }],
dataWithoutItem3 = data.filter(function (o) {
return !('item3' in o);
});
document.write('<pre>' + JSON.stringify(dataWithoutItem3, 0, 4) + '</pre>');
&#13;
答案 8 :(得分:0)
你就是这样做的;
var data = [
{item1: 123, item2: "name", item3: "id"},
{item1: 234, item2: "other"},
{item1: 456, item2: "another"},
{item1: 789, item2: "again"}
],
newData = data.map(o => !o.item3 ? (o.item3 = "something",o) : o);
console.log(newData);