Nic*_*ick 9 javascript arrays indexof
可能重复:
对象数组中的indexOf方法?
我有一个遵循这种格式的javascript数组:
var arrayName = [
{id: "a", gender: "man", item: "stuff"},
{id: "b", gender: "woman", item: "stuff"},
{id: "c", gender: "man", item: "stuff"},
{id: "d", gender: "man", item: "stuff"}
];
Run Code Online (Sandbox Code Playgroud)
有没有办法可以使用array.indexOf在数组中查找索引,例如我知道"id"变量.
比如我试过;
var position = arrayName.indexOf("b");
arrayName[position].gender = "man"
Run Code Online (Sandbox Code Playgroud)
我正在使用的那一刻;
for(var i=0; i<arrayName.length; i++) {
if(arrayName[i].id == "b"){
arrayName[i].gender = "man";
}
}
Run Code Online (Sandbox Code Playgroud)
第二种技术有效,但我使用的实际数组在每个条目中有150个条目和10个项目,因此当我知道要编辑的条目的"id"时,循环遍历它似乎非常浪费.如果我可以使它工作,indexOf将是一个更清洁的方法.
Ada*_*kis 19
您的调用indexOf是检查数组中的对象与字符串b,这将永远不会工作.
循环遍历数组元素以找到正确的id是一个简单的解决方案.
或者,您可以创建自己的indexOf函数:
Array.prototype.indexOfId = function(id) {
for (var i = 0; i < this.length; i++)
if (this[i].id === id)
return i;
return -1;
}
var arrayName = [
{ id: "a", gender: "man", item: "stuff" },
{ id: "b", gender: "woman", item: "stuff" },
{ id: "c", gender: "man", item: "stuff" },
{ id: "d", gender: "man", item: "stuff" }];
var position = arrayName.indexOfId("b");
alert(position); //alerts 1
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴
编辑
如果要将数组元素与任何属性进行比较,请按照以下方法进行操作(请注意,我使用[]语法来获取任意属性)
Array.prototype.indexOfField = function (propertyName, value) {
for (var i = 0; i < this.length; i++)
if (this[i][propertyName] === value)
return i;
return -1;
}
var position = arrayName.indexOfField("id", "b");
alert(position); //alerts 1
position = arrayName.indexOfField("gender", "man");
alert(position); //alerts 0
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想使用Array的原型,并且不介意使用旧浏览器中不存在的filter功能,则可以使用Array的功能
var position = arrayName.indexOf(arrayName.filter(function (val) {
return val.id === "b";
})[0]);
Run Code Online (Sandbox Code Playgroud)
请注意,IE8中不存在此功能,因此要支持此浏览器,您必须从MDN获取填充程序
编辑 - oops,indexOf对旧浏览器也不友好.如果您选择第二位代码并希望支持IE,那么您还必须从这里获取indexOf的垫片
| 归档时间: |
|
| 查看次数: |
10286 次 |
| 最近记录: |