迭代嵌套的对象数组

3
我正在尝试迭代包含任务对象数组的对象。我该如何迭代每个键值对,以便例如返回所有状态为“已完成”的任务?
{
    "quests": [
        {
            "title": "A Rum Deal",
            "status": "COMPLETED",
            "difficulty": 2,
            "members": true,
            "questPoints": 2,
            "userEligible": true
        }
    ],
    "loggedIn": false
}

迭代还是返回? - Nina Scholz
我觉得你不是想要“遍历每个键值对”。你想要遍历数组中的元素。键/值对是对象的特性;而元素是数组的特性。顺便说一句,即使你不知道“filter”这个词,用谷歌搜索find matching object array javascript property也会立刻找到答案。 - user663031
3个回答

2

如果需要迭代数组,你可以使用Array#forEach方法。

object.quests.forEach(function (a) {
    if (a.status === "COMPLETED") {
        // do something with the data
    }
});

为了返回已完成任务的选择,您可以使用 Array#filter
var completed = object.quests.filter(function (a) {
    return a.status === "COMPLETED";
});

1
使用 Array.prototype.filter 过滤掉具有“completed”状态的元素-请参见下面的演示:

var array={"quests":[{"title":"A Rum Deal","status":"COMPLETED","difficulty":2,"members":0,"questPoints":2,"userEligible":0},{"title":"A Rum Deal","status":"NOT_COMPLETED","difficulty":2,"members":0,"questPoints":2,"userEligible":0}],"loggedIn":1};

var result = array.quests.filter(function(e){
   return e.status && e.status === "COMPLETED";
});

console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}


e.status && 部分的作用是什么? - user663031
检查 status 是否是 e 的属性。 - kukkuz
1
不必要。如果status不是e的属性,则e.status将为未定义,这将与“COMPLETED”不相等。 - user663031
你说得没错,这已经成为我写代码时的习惯了 :) - kukkuz

1
这就是JavaScript过滤器的作用。
myObj.quests.filter(item => item.status === 'COMPLETED');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接