如何通过值(如果包含)获取键在数组中的索引?

时间:2018-07-14 23:03:39

标签: javascript arrays indexof

这就是我的意思。

var brands = [['brand: LV'], ['brand: Apple']]...

有了这个,我想定位..Apple的(索引)。手动,我可以轻松完成

brands[1]

但这会动态更新,因此索引将是随机的。

3 个答案:

答案 0 :(得分:0)

使用findIndex()indexOf()

示例:brands.findIndex(doc => doc[0] === 'brand: Apple')

答案 1 :(得分:0)

您的格式有点不方便,通常您会有一个对象数组而不是像这样的字符串数组,但是无论如何您仍然可以:

let brands = [ ['brand: LV'],['brand: Apple']]
let f = brands.findIndex(subarray => subarray.some(i => i.includes('Apple')))
console.log(f, brands[f])

请注意,由于您拥有这些数组,因此考虑了其中一个数组具有多个值的可能性。因此请考虑:

let  brands = [['brand: LV'], ['brand: Sony', 'brand: Apple']]
let f = brands.findIndex(subarray => subarray.some(i => i.includes('Apple')))
console.log(f, brands[f])
如果您知道每个子数组只有一个值,则可以进行测试:

let brands = [ ['brand: LV'],['brand: Apple']]
let f = brands.findIndex(subarray => subarray[0].includes('Apple'))
console.log(f, brands[f])

答案 2 :(得分:0)

由于您的数据是一个数组数组,所以简单的includesindexOf在顶层将不起作用,因此您需要测试每个元素。使用findIndex可以将自定义函数依次应用于每个元素:

let brands = [
  ['brand: LV'],
  ['brand: Apple']
];

function findBrand(name) {
    let testValue = `brand: ${name}`;
    return brands.findIndex( elem => elem.includes(testValue) );
}

console.log(findBrand('Apple'))