我有一个这样的数组:

[{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"},...]

我怎么能得到对象的索引,匹配的条件,而不是在整个数组上迭代?

例如,给定prop2=="yutu",我想获得索引1。

我看到过. indexof(),但认为它用于简单的数组,如["a1","a2",…]。我还检查了$.grep(),但这返回对象,而不是索引。


当前回答

var CarId = 23;

//x.VehicleId property to match in the object array
var carIndex = CarsList.map(function (x) { return x.VehicleId; }).indexOf(CarId);

对于基本数组号,你也可以这样做:

var numberList = [100,200,300,400,500];
var index = numberList.indexOf(200); // 1

如果它在数组中找不到值,就会得到-1。

其他回答

最好和最快的方法是:

const products = [
  { prop1: 'telephone', prop2: 996 },
  { prop1: 'computadora', prop2: 1999 },
  { prop1: 'bicicleta', prop2: 995 },
];

const index = products.findIndex(el => el.prop2 > 1000);

console.log(index); // 1

为什么不进行迭代呢?新的Array.prototype.forEach非常适合这个目的!

如果需要,可以使用二叉搜索树通过单个方法调用进行查找。这是一个整洁的实现的BTree和红黑搜索树在JS - https://github.com/vadimg/js_bintrees -但我不确定你是否能同时找到索引。

使用Array.map()和Array.indexOf(string)

const arr = [{ 提案 1: “ABC”, 提案2:“QWE” }, { 提案 1: “bnmb”, 提案2:“玉兔” }, { 提案1:“ZXVZ”, 提案2:“QWRQ” }] const index = arr.map(i => i.prop2).indexOf(“yutu”); 控制台.log(索引);

var index;
yourArray.some(function (elem, i) {
    return elem.prop2 === 'yutu' ? (index = i, true) : false;
});

遍历数组的所有元素。 它返回索引,如果条件不匹配则返回true或false。

重要的是显式返回值为true(或布尔结果为true的值)。单个赋值是不够的,因为索引可能为0 (Boolean(0) === false),这不会导致错误,但会禁用中断迭代。

Edit

上面的一个更简短的版本:

yourArray.some(function (elem, i) {
    return elem.prop2 === 'yutu' && ~(index = i);
});

试试这段代码

var x = [{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"}]
let index = x.findIndex(x => x.prop1 === 'zxvz')