我有一个像这样的数组:
[{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"},...]
如何在不迭代整个数组的情况下获取与条件匹配的对象的索引?
例如,给定prop2=="yutu"
,我想获取index 1
。
我看到了,.indexOf()
但认为它用于类似的简单数组["a1","a2",...]
。我也检查了一下,$.grep()
但这返回了对象,而不是索引。
从2016年开始,您应该为此使用Array.findIndex
(ES2015 /
ES6标准):
a = [
{prop1:"abc",prop2:"qwe"},
{prop1:"bnmb",prop2:"yutu"},
{prop1:"zxvz",prop2:"qwrq"}];
index = a.findIndex(x => x.prop2 ==="yutu");
console.log(index);
Google Chrome,Firefox和Edge支持该功能。对于Internet Explorer,在链接页面上有一个polyfill。
性能说明
函数调用是昂贵的,因此对于非常大的数组,简单的循环将比findIndex
:
let test = [];
for (let i = 0; i < 1e6; i++)
test.push({prop: i});
let search = test.length - 1;
let count = 100;
console.time('findIndex/predefined function');
let fn = obj => obj.prop === search;
for (let i = 0; i < count; i++)
test.findIndex(fn);
console.timeEnd('findIndex/predefined function');
console.time('findIndex/dynamic function');
for (let i = 0; i < count; i++)
test.findIndex(obj => obj.prop === search);
console.timeEnd('findIndex/dynamic function');
console.time('loop');
for (let i = 0; i < count; i++) {
for (let index = 0; index < test.length; index++) {
if (test[index].prop === search) {
break;
}
}
}
console.timeEnd('loop');
与大多数优化一样,应谨慎且仅在实际需要时才应用此优化。
为什么我不能得到数组中给定对象的索引? 期望的结果显然是2…
我有一个2D按钮数组(按钮),它将生成一个5×5的按钮网格。我想在单击时获取单个按钮的索引(例如,(2,2)在中间),并通过创建Topcenter(这将是按钮的索引(x,y-1)或1,2,其中x和y是单击按钮的值)等整数变量,在3 x 3半径内找到围绕原始按钮的按钮的索引值。)然后,我可以向周围的按钮添加文本等。 这是一个可视化: 0,0|0,1|0,2|0,3|0,4 1,0 | 1,1 | 1
我在Sybase数据库中有一个表,其中有一列is_req。它的数据类型是char(1)。它在我的hbm文件中的属性定义如下: 属性名称="is必需"列="is_req"类型="boolean" 现在,当我尝试使用标准/限制进行比较时,比如:,我得到以下例外: 如果我尝试做,我得到以下异常: com.sybase.jdbc2.jdbc.SybSQLException:不允许从数据类型'VARCHAR
问题内容: 我想以jQuery或纯JavaScript的形式获取JavaScript对象的键作为数组。 有没有比这更详细的方法? 问题答案: 用途: 这是ES5的功能。这意味着它可以在所有现代浏览器中使用,但不能在旧版浏览器中使用。 ES5-shim有一个实现可以偷
如何在流中获得第一个匹配条件的元素?我试过了,但不起作用 如果条件不起作用,则在Stop以外的其他类中调用filter方法。
任务: 有3个endpoint: 第一个返回请求的随机数据到另外两个endpoint。 另外两个endpoint使用不同的DBs操作,但或多或少使用相似的数据。 我需要验证来自一个endpoint的响应是否匹配来自另一个endpoint的响应,两个endpoint发送相同的数据,但顺序不同。 例如。: endpoint“A”: endpoint“B”: endpointA_response.ite