如果我有一个这样的数组:如何通过搜索数组来找出对象的数组位置?
var array1 =
[
{"phraseId":"abc",
"keyword":"bb",
"posId":1},
{"phraseId":"def",
"keyword":"bb",
"posId":1},
]
我怎么能找出与phraseId对象“高清”已经第二的位置?
如果我有一个这样的数组:如何通过搜索数组来找出对象的数组位置?
var array1 =
[
{"phraseId":"abc",
"keyword":"bb",
"posId":1},
{"phraseId":"def",
"keyword":"bb",
"posId":1},
]
我怎么能找出与phraseId对象“高清”已经第二的位置?
使用原生JavaScript findIndex
方法。
var array1 = [{
"phraseId": "abc",
"keyword": "bb",
"posId": 1
}, {
"phraseId": "def",
"keyword": "bb",
"posId": 1
}, ];
var pos = array1.findIndex(function(v) {
// set your condition for finding object
return v.phraseId == 'def';
// add `1` since you want to count from `1`
}) + 1;
console.log("Position of the object " + pos);
对于较旧的浏览器check polyfill option。
var array1 = [{
"phraseId": "abc",
"keyword": "bb",
"posId": 1
}, {
"phraseId": "def",
"keyword": "bb",
"posId": 1
}, ];
var pos = array1.findIndex(v => v.phraseId == 'def') + 1;
console.log("Position of the object " + pos);
我不知道'findIndex'是官方的ECMAScript 6的东西。整齐。 – StriplingWarrior
我认为这个解决方案比'.map()'更好,因为'findIndex()'它本地的JS方法返回一个数组中的索引,这与数组迭代使用的'.map'不同。有趣的是看到这两种方法的一些基准。 – semanser
由于我们使用的是最新版的酷东西,为什么不用简单的方式写它:'var pos = array1.findIndex(v => v.phraseId ==='def');' –
你可以映射你的对象,仅返回目标字段,然后使用内置indexOf
获得位置:
array1.map(item => item.phraseId).indexOf('def')
没有downvoting,但是这会导致数组的2次迭代以及为第二个映射数组分配更多的内存,这是不必要的。 –
它的工作原理这种方式:
array1.forEach((elem, index) => {if (elem.phraseId === "def")
console.log("index = " + index);
});
假设你的关键是知道(你知道你正在寻找一个始终),那么你可以简单地通过数组与正常for
循环迭代,如果你使用的是“传统”的JS,如果您使用的是ES6,则使用forEach
。这是简单的for
实现。
for (var i = 0; i < array1.length; i++){
if(array[i].phraseId === 'def') {
// we know "i" is the index, so do something...
}
}
为了使它更通用的,因此您可以搜索任何阵列任意键,做它的一个函数,返回指数:
function whatIndex (arr, key, val) {
for (var i = 0; i < arr.length; i++) {
if(arr[i][key] === val) {
return i;
}
}
}
可能重复:http://stackoverflow.com/questions/7364150 /找到对象的id对象的对象的数组 –
为什么你不能使用循环? –