一种有效的方法是按其find
方法搜索数组。那么回调方法就需要实现匹配条件,即……当前处理的数组项是否有key,一个正在寻找……
obj => obj.hasOwnProperty(key)
find
then 确实返回(第一个)匹配对象或返回undefined
值。对于后一种情况,为了防止访问 的属性undefined
,可以使用可选的链接/?.
运算符
最终的解决方案可能看起来类似于下一个提供的解决方案......
const sampleList = [{
'2': [1, 3],
}, {
'3': [1, 4],
}, {
'4': [2, 6],
}];
function getFirstItemOfObjectByKey(arr, key) {
return (arr.find(obj =>
obj.hasOwnProperty(key)
))?.[key][0];
}
console.log(
getFirstItemOfObjectByKey(sampleList, 4) // expected: 2
);
console.log(
getFirstItemOfObjectByKey(sampleList, 3) // expected: 1
);
console.log(
getFirstItemOfObjectByKey(sampleList, 1) // expected: undefined
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
如果有人被迫使用某种滥用的稀疏数组结构,就像 OP 正在经历的那样,上述方法会稍微改变为......
var abusedSparseArray = new Array();
abusedSparseArray["3"] = [20, 2];
abusedSparseArray["4"] = [25, 3];
abusedSparseArray["5"] = [35, 2];
function getFirstItemOfArrayEntryByEntryKey(arr, key) {
return (arr.find((entry, idx) =>
idx === key
) || [])[0];
}
console.log(
getFirstItemOfArrayEntryByEntryKey(abusedSparseArray, 3) // expected: 20
);
console.log(
getFirstItemOfArrayEntryByEntryKey(abusedSparseArray, 4) // expected: 25
);
console.log(
getFirstItemOfArrayEntryByEntryKey(abusedSparseArray, 5) // expected: 35
);
console.log(
getFirstItemOfArrayEntryByEntryKey(abusedSparseArray, 1) // expected: undefined
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
最终结果证明,OP 想通过在这样的稀疏数组结构中查找这样的条目来了解稀疏数组中条目/项目的某种真实位置计数。index
key
在这种情况下,必须将稀疏数组视为普通(键值)对象。将这样的对象传递给Object.entries
,得到一个条目数组,其中每个条目是一个包含两个项目的数组,即条目键和条目值。现在只需要找到稀疏数组项的键的索引/findIndex
正在寻找...
const sparseArray = new Array();
sparseArray["5"] = [35, 2];
sparseArray["3"] = [20, 2];
sparseArray["4"] = [25, 3];
function getRealPositionCountOfSparseArrayEntryByKey(arr, key) {
key = String(key);
return Object
.entries(arr)
.findIndex(entry => entry[0] === key);
}
console.log(
getRealPositionCountOfSparseArrayEntryByKey(sparseArray, 3) // expected: 0
);
console.log(
getRealPositionCountOfSparseArrayEntryByKey(sparseArray, 4) // expected: 1
);
console.log(
getRealPositionCountOfSparseArrayEntryByKey(sparseArray, 5) // expected: 2
);
console.log(
getRealPositionCountOfSparseArrayEntryByKey(sparseArray, 1) // expected: -1
);
.as-console-wrapper { min-height: 100%!important; top: 0; }