rsb*_*der 208 javascript arrays object
例如我有:
var Data = [
{ id_list: 1, name: 'Nick', token: '312312' },
{ id_list: 2, name: 'John', token: '123123' },
]
Run Code Online (Sandbox Code Playgroud)
然后我想通过例如排序/反转这个对象name
.我得到这样的东西:
var Data = [
{ id_list: 2, name: 'John', token: '123123' },
{ id_list: 1, name: 'Nick', token: '312312' },
]
Run Code Online (Sandbox Code Playgroud)
现在我想知道带有属性的对象索引name='John'
来获取属性令牌的值.
Ger*_*sio 288
由于排序部分已经回答.我将提出另一种优雅的方法来获取数组中属性的indexOf
你的例子是:
var Data = [
{id_list:1, name:'Nick',token:'312312'},
{id_list:2,name:'John',token:'123123'}
]
Run Code Online (Sandbox Code Playgroud)
你可以做:
var index = Data.map(function(e) { return e.name; }).indexOf('Nick');
Run Code Online (Sandbox Code Playgroud)
Array.prototype.map
在IE7或IE8上不可用.ES5兼容性
这里有ES6和箭头语法,这更简单:
const index = Data.map(e => e.name).indexOf('Nick');
Run Code Online (Sandbox Code Playgroud)
sil*_*513 179
如果你使用ES6就好了.数组现在有findIndex函数.这意味着你可以这样做:
const index = Data.findIndex(item => item.name === 'John');
Run Code Online (Sandbox Code Playgroud)
Chr*_*ett 155
正如其他答案所示,循环遍历数组可能是最好的方法.但我会把它放在它自己的功能中,并使它更抽象一点:
function findWithAttr(array, attr, value) {
for(var i = 0; i < array.length; i += 1) {
if(array[i][attr] === value) {
return i;
}
}
return -1;
}
var Data = [
{id_list: 2, name: 'John', token: '123123'},
{id_list: 1, name: 'Nick', token: '312312'}
];
Run Code Online (Sandbox Code Playgroud)
有了这个,您不仅可以找到哪个包含'John',而且您可以找到包含令牌'312312'的内容:
findWithAttr(Data, 'name', 'John'); // returns 0
findWithAttr(Data, 'token', '312312'); // returns 1
findWithAttr(Data, 'id_list', '10'); // returns -1
Run Code Online (Sandbox Code Playgroud)
编辑: 更新函数在未找到时返回-1,因此它遵循与Array.prototype.indexOf()相同的构造
eda*_*ank 19
var index = Data.findIndex(item => item.name == "John")
Run Code Online (Sandbox Code Playgroud)
这是一个简化版本:
var index = Data.findIndex(function(item){ return item.name == "John"})
Run Code Online (Sandbox Code Playgroud)
findIndex()方法返回数组中第一个满足提供的测试函数的元素的索引.否则返回-1.
Ala*_* T. 15
如果您在使用IE时遇到问题,则可以使用9.0及更高版本支持的map()函数:
var index = Data.map(item => item.name).indexOf("Nick");
Run Code Online (Sandbox Code Playgroud)
我知道的唯一方法是循环遍历所有数组:
var index = -1;
for(var i=0; i<Data.length; i++)
if(Data[i].name === "John") {
index = i;
break;
}
Run Code Online (Sandbox Code Playgroud)
或者不区分大小写:
var index = -1;
for(var i=0; i<Data.length; i++)
if(Data[i].name.toLowerCase() === "john") {
index = i;
break;
}
Run Code Online (Sandbox Code Playgroud)
结果变量索引包含对象索引,如果未找到则为 -1。
归档时间: |
|
查看次数: |
222672 次 |
最近记录: |