如何在 Object 中搜索在数组中也有值的值?
How to search a value in Object which has values in array as well?
我有一个对象如下;
FOO: {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
},
我需要搜索此对象的值以匹配 keys
的值。有大量样本给出了 keys
的奇异值,但我找不到任何样本也能够搜索数组中的值。
我怎样才能搜索 FOO
对象的所有这些值并与 keys
匹配?
注:目的;我将寻找一个输入,如果给定的输入是 2
那么期望得到密钥 BETA
或者如果给定的输入是 4
那么 ZET
.
所以基本上这些值已经是一些预定义的唯一值了。
像这样的东西应该可以工作:
// What we're searching
FOO = {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
};
function findValue(findValue, obj) {
return Object.entries(FOO)
.filter(([key,value]) => value === findValue || Array.isArray(value) && value.includes(findValue))
.map(([key,value])=> key);
}
function testfindValue(value, obj) {
console.log("testfindValue: \nInput: " + value, "Result: ", findValue(value,obj));
}
testfindValue(4, FOO);
testfindValue(6, FOO);
testfindValue(32, FOO);
testfindValue(99, FOO);
您可以使用简单的 for...in
循环和数组的 .concAT()
和 .includes()
方法来完成:
let obj = {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
};
let locator = (o, v) => {
for (var prop in o) {
if([].concat(o[prop]).includes(v)){
return prop;
}
}
}
console.log(locator(obj, 2));
console.log(locator(obj, 4));
您可以简单地遍历对象并搜索值来识别键。如果找到多个匹配项,将返回匹配结果的键数组。
function objSearch(key, obj) {
const keys = [];
for (let item in obj) {
if (obj.hasOwnProperty(item)) {
if (obj[item] === key || (Array.isArray(obj[item]) && obj[item].indexOf(key) > -1)) {
keys.push(item);
}
}
}
return keys;
}
const obj = {
FOO: {
BAR: [9, 32, 8, 12],
ZET: 4,
BETA: [3, 14, 6, 2],
ALPHA: 37
}
};
const res1 = objSearch(14, obj.FOO); // Exist
const res2 = objSearch(15, obj.FOO); // Does not exist
const res3 = objSearch(37, obj.FOO); // Exist
console.log(res1);
console.log(res2);
console.log(res3);
试试这个片段,
我正在检查对象值的条件,无论是它的数组还是值以及应用条件。我也保持父键动态。
var abc = {
FOO: {
BAR: [9, 32, 8, 12],
ZET: 4,
BETA: [3, 14, 6, 2],
ALPHA: 37
},
DAB: {
DBAR: [9, 32, 8, 12],
DZET: 4,
DBETA: [3, 14, 6, 2],
DALPHA: 37
},
};
function retTitle(abc, parent, k) {
var title = '';
$.each(abc[parent], function(x, y) {
if ((Array.isArray(y) && y.indexOf(k) != -1) || (!Array.isArray(y) && y == k)) {
title = x;
return;
}
});
return title;
}
var title = retTitle(abc, 'DAB', 4);
console.log(title);
您可以使用简单的 for...in
循环来迭代键。然后检查该值是否为数字并等于您要查找的值。如果它不是一个数字那么它就是一个数组 - 所以你检查这个数组是否包含你正在寻找的数字。
var FOO = {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
};
function findKeyByValue(obj, val) {
for (var i in FOO) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof FOO[i] === 'number') {
if(FOO[i] === val) return i;
} else {
if(FOO[i].includes(val)) return i;
}
}
}
console.log(findKeyByValue(FOO, 4));
您可以获取键,创建值数组并检查 includes
。 Return 找到的密钥。
function find(object, value) {
return Object
.keys(object)
.find(k => [].concat(object[k]).includes(value));
}
var object = { FOO: { BAR: [9, 32, 8, 12], ZET: 4, BETA: [3, 14, 6, 2], ALPHA: 37 } };
console.log(find(object.FOO, 4));
console.log(find(object.FOO, 8));
我有一个对象如下;
FOO: {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
},
我需要搜索此对象的值以匹配 keys
的值。有大量样本给出了 keys
的奇异值,但我找不到任何样本也能够搜索数组中的值。
我怎样才能搜索 FOO
对象的所有这些值并与 keys
匹配?
注:目的;我将寻找一个输入,如果给定的输入是 2
那么期望得到密钥 BETA
或者如果给定的输入是 4
那么 ZET
.
所以基本上这些值已经是一些预定义的唯一值了。
像这样的东西应该可以工作:
// What we're searching
FOO = {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
};
function findValue(findValue, obj) {
return Object.entries(FOO)
.filter(([key,value]) => value === findValue || Array.isArray(value) && value.includes(findValue))
.map(([key,value])=> key);
}
function testfindValue(value, obj) {
console.log("testfindValue: \nInput: " + value, "Result: ", findValue(value,obj));
}
testfindValue(4, FOO);
testfindValue(6, FOO);
testfindValue(32, FOO);
testfindValue(99, FOO);
您可以使用简单的 for...in
循环和数组的 .concAT()
和 .includes()
方法来完成:
let obj = {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
};
let locator = (o, v) => {
for (var prop in o) {
if([].concat(o[prop]).includes(v)){
return prop;
}
}
}
console.log(locator(obj, 2));
console.log(locator(obj, 4));
您可以简单地遍历对象并搜索值来识别键。如果找到多个匹配项,将返回匹配结果的键数组。
function objSearch(key, obj) {
const keys = [];
for (let item in obj) {
if (obj.hasOwnProperty(item)) {
if (obj[item] === key || (Array.isArray(obj[item]) && obj[item].indexOf(key) > -1)) {
keys.push(item);
}
}
}
return keys;
}
const obj = {
FOO: {
BAR: [9, 32, 8, 12],
ZET: 4,
BETA: [3, 14, 6, 2],
ALPHA: 37
}
};
const res1 = objSearch(14, obj.FOO); // Exist
const res2 = objSearch(15, obj.FOO); // Does not exist
const res3 = objSearch(37, obj.FOO); // Exist
console.log(res1);
console.log(res2);
console.log(res3);
试试这个片段,
我正在检查对象值的条件,无论是它的数组还是值以及应用条件。我也保持父键动态。
var abc = {
FOO: {
BAR: [9, 32, 8, 12],
ZET: 4,
BETA: [3, 14, 6, 2],
ALPHA: 37
},
DAB: {
DBAR: [9, 32, 8, 12],
DZET: 4,
DBETA: [3, 14, 6, 2],
DALPHA: 37
},
};
function retTitle(abc, parent, k) {
var title = '';
$.each(abc[parent], function(x, y) {
if ((Array.isArray(y) && y.indexOf(k) != -1) || (!Array.isArray(y) && y == k)) {
title = x;
return;
}
});
return title;
}
var title = retTitle(abc, 'DAB', 4);
console.log(title);
您可以使用简单的 for...in
循环来迭代键。然后检查该值是否为数字并等于您要查找的值。如果它不是一个数字那么它就是一个数组 - 所以你检查这个数组是否包含你正在寻找的数字。
var FOO = {
BAR: [9,32,8,12 ],
ZET: 4,
BETA: [3,14,6,2],
ALPHA: 37
};
function findKeyByValue(obj, val) {
for (var i in FOO) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof FOO[i] === 'number') {
if(FOO[i] === val) return i;
} else {
if(FOO[i].includes(val)) return i;
}
}
}
console.log(findKeyByValue(FOO, 4));
您可以获取键,创建值数组并检查 includes
。 Return 找到的密钥。
function find(object, value) {
return Object
.keys(object)
.find(k => [].concat(object[k]).includes(value));
}
var object = { FOO: { BAR: [9, 32, 8, 12], ZET: 4, BETA: [3, 14, 6, 2], ALPHA: 37 } };
console.log(find(object.FOO, 4));
console.log(find(object.FOO, 8));