在具有特定键的特定值的数组中查找对象的索引[重复]

Posted

技术标签:

【中文标题】在具有特定键的特定值的数组中查找对象的索引[重复]【英文标题】:Find index of object in array with specific value for specific key [duplicate] 【发布时间】:2018-12-05 02:26:02 【问题描述】:

我有一个对象,我需要在其中找到一个特定的项目索引号。下面是我的对象:

[
  
    "type": "Grayscale",
    "mode": "average"
  , 
    "type": "Sepia"
  , 
    "type": "Invert",
    "invert": true
  , 
    "type": "Convolute",
    "opaque": false,
    "matrix": [1, 1, 1, 1, 0.7, -1, -1, -1, -1]
  , 
    "type": "Convolute",
    "opaque": false,
    "matrix": [0, -1, 0, -1, 5, -1, 0, -1, 0]
  , 
    "type": "Brownie"
  , 
    "type": "Brightness",
    "brightness": 0.35
  
]

例如,我需要为type 属性找到值为Invert 的项目的索引号。所以在这种情况下,输出应该是2。我只需要搜索type 键的值。

【问题讨论】:

“我只有键入键值来查找索引”请详细说明 您只需要找到类型为 Invert 的第一个实例,还是该数组可以容纳许多这样的对象 所以你想遍历数组中的每个对象,直到找到一个“type”属性等于“Invert”的对象,然后你想输出数组中该项目出现的索引。如果您需要能够找到不止一个事件,请继续您的循环。听起来不太难,你自己试过了吗? 我的意思是找到我有 key("type":) 值的项目的索引号,在上面的例子中值是 Invert 【参考方案1】:

您可以使用findIndex 方法,将提供的回调 函数作为参数传递。

let arr = [ "type":"Grayscale","mode":"average", "type":"Sepia", "type":"Invert","invert":true, "type":"Convolute","opaque":false,"matrix":[1,1,1,1,0.7,-1,-1,-1,-1], "type":"Convolute","opaque":false,"matrix":[0,-1,0,-1,5,-1,0,-1,0], "type":"Brownie", "type":"Brightness","brightness":0.35 ], key = 'type';
console.log(arr.findIndex(elem => elem[key] == 'Invert'));

【讨论】:

如果 OP 想要 'Type' 而不是 'Invert' 怎么办? 唯一值得注意的是,任何版本的 Internet Explorer 都不支持此功能 - 请参阅 developer.mozilla.org/en-US/docs/Web/javascript/Reference/…,因此如果您需要支持 IE,则需要链接中显示的 polyfill 为什么要去掉对象解构???这是答案中最好的部分! (因为findIndex 是众所周知的......) @ADyson 你认为我们什么时候可以向前看,然后埋葬这个浏览器?任何需要为 IE 编写代码的人都应该知道 polyfills 和 transpiling 是他们需要担心的事情。 @GerardoFurtado,因为我认为 OP 希望以动态方式给出该属性。【参考方案2】:

这是代码的简短 sn-p。

var sample = ["type":"Grayscale","mode":"average","type":"Sepia","type":"Invert","invert":true,"type":"Convolute","opaque":false,"matrix":[1,1,1,1,0.7,-1,-1,-1,-1],"type":"Convolute","opaque":false,"matrix":[0,-1,0,-1,5,-1,0,-1,0],"type":"Brownie","type":"Brightness","brightness":0.35]  

function findIndex(data, keyfield, value)
  
  return data.indexOf(data.find(function(el,index)
    return el[keyfield] === value;
  ));


console.log(findIndex(sample, 'type', 'Invert'));

【讨论】:

【参考方案3】:

您可以使用下划线或 loadash(_) 包。它具有对数组操作的多种功能支持。

const _ = require('lodash')

let your_array=  [
      "type":"Grayscale","mode":"average",
      "type":"Sepia",
      "type":"Invert","invert":true,
      "type":"Convolute","opaque":false,"matrix":[1,1,1,1,0.7,-1,-1,-1,-1],
      "type":"Convolute","opaque":false,"matrix":[0,-1,0,-1,5,-1,0,-1,0],
      "type":"Brownie",
      "type":"Brightness","brightness":0.35
    ];
    let objectIndex = _.findIndex(your_array, each_element=> each_element.type == "Invert");
    alert(objectIndex)

【讨论】:

链接 lodash lodash.com/docs/4.17.10

以上是关于在具有特定键的特定值的数组中查找对象的索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将通用JS集合转换为具有特定键和分组值的对象

如何根据查找具有特定值的实体在我的核心数据之间进行迭代

在列表中查找具有特定值的对象

在 1D NumPy 数组中查找值的索引/位置(具有相同的值)[重复]

搜索特定值的嵌套字典列表[重复]

查找两个总和为特定值的索引