【发布时间】:2016-09-23 23:51:12
【问题描述】:
我有一个包含不同角色的对象,我有一个包含特定颜色的数组。
我想要做的是查看 roles.name 是否包含颜色数组中的任何字符串。我尝试了不同的方法,例如:
var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"];
var roles = [{"name": "asd"},
{"name": "blue"},
{"name": "yellow"},
{"name": "brown"},
{"name": "red"},
{"name": "green"},
{"name": "pink"},
{"name": "purple"},
{"name": "fgh"},
{"name": "jkl"}];
for (var i = 0; i < roles.length; i++) {
if (roles[i].name.indexOf(colors)) {
console.log(roles[i].name);
}
}
和
var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"];
var roles = [{"name": "asd"},
{"name": "blue"},
{"name": "yellow"},
{"name": "brown"},
{"name": "red"},
{"name": "green"},
{"name": "pink"},
{"name": "purple"},
{"name": "fgh"},
{"name": "jkl"}];
roles.forEach(role => {
if (role.name.indexOf(colors)) {
console.log(role.name);
}
});
但是对于这两个代码,结果是完整的角色列表。
预期结果是记录到控制台的所有颜色。我得到的是记录到控制台的所有角色。
【问题讨论】:
-
在ES6中可以使用
Array#find和Array#findIndex,还有Array#includes -
你的对象有所有同名的键,从字面上看,它们都叫
name,所以你覆盖了之前的键和值。 -
当您将对象视为数组时,如何记录所有角色?
-
var 角色不正确,实际上并非如此。我在那部分犯了一个错误。它们实际上都是独立的对象。我编辑了我的问题。
标签: javascript arrays for-loop foreach indexof