我有一个看起来像这样的收藏集:
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];
},
答案 0 :(得分:0)
使用value
作为key
和key
作为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
(或underscore
或lazy
)使其更简洁,更简单。
这是 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>