如何通过值Javascript

时间:2018-11-08 09:42:36

标签: javascript arrays object collections

我有一个看起来像这样的收藏集:

    var array = [
     { 'key1': 'val1'},
     { 'key2': 'val2'}
    ];

我想要一个将数组和值作为参数并返回该值的键(值是唯一的)的函数

 getKey(array, 'val1');
 >>>>> output: 'key1'

我尝试了以下解决方案,但说未定义键属性:

         getKey(array, value) {
            var keys = [];
            array.forEach(function(element) {
                for (key in element) {
                    if(value == element[key]) {
                        keys.push(key);
                    }
                }
            })

            return keys[0];
        },

4 个答案:

答案 0 :(得分:0)

使用value作为keykey作为value创建一个反向对象。然后最后从对象访问value作为键。

var array = [{ 'key1': 'val1'},{ 'key2': 'val2'}];

function getKey(arr, val) {
  let obj = arr.reduce((a,c) => {
    Object.entries(c).forEach(([k,v]) => a[v]=k);
    return a;
  }, {})
  return obj[val];
}

console.log(getKey(array, 'val1'));

答案 1 :(得分:0)

var arr = [{ 'key1': 'val1'}, { 'key2': 'val2'}];

function getKey(data,value) {
let keys=[];
data.forEach(function(element) {
  for (key in element) {
     if(element[key]==value)
       keys.push(key);
  }
});
return keys
}

console.log(getKey(arr, 'val1'))

答案 2 :(得分:0)

您也可以尝试以下方法:

var arr = [{ 'key1': 'val1'}, { 'key2': 'val2'}];

function getKey(arr, val) {
  var result = 'not found';
  arr.forEach(obj => {
    for (var key in obj) {
      if(obj[key] === val) result = key;
    }
  });
  return result;
}

console.log(getKey(arr, 'val1'));
console.log(getKey(arr, 'value'));

答案 3 :(得分:0)

在纯JS中,您可以获取所有条目,将它们展平,然后简单地搜索所有对中的值,如果找到,则只需获取该对中的第一项。

[].concat(...array.map(Object.entries)).find(a=>a[1]=='val1')[0]

这是一个有效的示例:

var array = [{'key1': 'val1'}, {'key2': 'val2'}, {'key3': 'val3'}],
    getKey = (arr,v)=>[].concat(...arr.map(Object.entries)).find(a=>a[1]==v)[0];
    
console.log(getKey(array, 'val2'));
console.log(getKey(array, 'val3'));

但是,我建议您使用lodash(或underscorelazy)使其更简洁,更简单。

这是 lodash 方法:

_.findKey(_.merge({}, ...array), s=>s=='val1')

这是一个醒目的示例:

var array = [{'key1': 'val1'}, {'key2': 'val2'}, {'key3': 'val3'}],
    getKey = (arr,v)=>_.findKey(_.merge({}, ...arr), s=>s==v);
    
console.log(getKey(array, 'val2'));
console.log(getKey(array, 'val3'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>