如何使用 JavaScript 检查对象中是否存在值
How to check if a value exists in an object using JavaScript
我在 JavaScript 中有一个对象:
var obj = {
"a": "test1",
"b": "test2"
}
如何检查 test1 是否作为值存在于对象中?
您可以将对象的值转换为数组并测试是否存在字符串。 它假定对象不是嵌套的,并且字符串完全匹配:
var obj = { a: 'test1', b: 'test2' };
if (Object.values(obj).indexOf('test1') > -1) {
console.log('has test1');
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
最短的 ES6+ 单行:
let exists = Object.values(obj).includes("test1");
Array 方法.some
:
var exists = Object.keys(obj).some(function(k) {
return obj[k] === "test1";
});
尝试:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
或
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
这不适用于NaN
,-0
这些值。您可以使用 ECMAScript 6 中的新功能(而不是===
):
Object.is(obj[key], value);
使用现代浏览器,您还可以使用:
var obj = {
"a": "test1",
"b": "test2"
};
if (Object.values(obj).includes('test1')) {
alert('exists');
}
使用 for...in
循环:
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
您可以使用 Object.values():
Object.values()
方法返回给定对象自己的数组可枚举属性值,其顺序与for...in
循环(区别在于 for-in 循环枚举原型链中的属性也是如此)。
然后使用 indexOf() 方法:
indexOf()
方法返回给定的第一个索引元素可以在数组中找到,如果不存在,则为 -1。
例如:
Object.values(obj).indexOf("test") >= 0
下面是一个更详细的例子:
var obj = {
"a": "test1",
"b": "test2"
}
console.log(Object.values(obj).indexOf("test1")); // 0
console.log(Object.values(obj).indexOf("test2")); // 1
console.log(Object.values(obj).indexOf("test1") >= 0); // true
console.log(Object.values(obj).indexOf("test2") >= 0); // true
console.log(Object.values(obj).indexOf("test10")); // -1
console.log(Object.values(obj).indexOf("test10") >= 0); // false
对于单行,我会说:
exist = Object.values(obj).includes("test1");
console.log(exist);
我用所有这些例子做了一个测试,我在 Node.js v8.11.2 中运行了这个。以此为指导,选择最佳选择。
let i, tt;
const obj = { a: 'test1', b: 'test2', c: 'test3', d: 'test4', e: 'test5', f: 'test6' };
console.time("test1")
i = 0;
for( ; i<1000000; i=i+1) {
if (Object.values(obj).indexOf('test4') > -1) {
tt = true;
}
}
console.timeEnd("test1")
console.time("test1.1")
i = 0;
for( ; i<1000000 ; i=i+1) {
if (~Object.values(obj).indexOf('test4')) {
tt = true;
}
}
console.timeEnd("test1.1")
console.time("test2")
i = 0;
for( ; i<1000000; i=i+1) {
if (Object.values(obj).includes('test4')) {
tt = true;
}
}
console.timeEnd("test2")
console.time("test3")
i = 0;
for( ; i<1000000 ; i=i+1) {
for(const item in obj) {
if(obj[item] == 'test4') {
tt = true;
break;
}
}
}
console.timeEnd("test3")
console.time("test3.1")
i = 0;
for( ; i<1000000; i=i+1) {
for(const [item, value] in obj) {
if(value == 'test4') {
tt = true;
break;
}
}
}
console.timeEnd("test3.1")
console.time("test4")
i = 0;
for( ; i<1000000; i=i+1) {
tt = Object.values(obj).some((val, val2) => {
return val == "test4"
});
}
console.timeEnd("test4")
console.time("test5")
i = 0;
for( ; i<1000000; i=i+1) {
const arr = Object.keys(obj);
const len = arr.length;
let i2 = 0;
for( ; i2<len ; i2=i2+1) {
if(obj[arr[i2]] == "test4") {
tt = true;
break;
}
}
}
console.timeEnd("test5")
我的服务器上的输出
test1: 272.325 ms
test1.1: 246.316 ms
test2: 251.98 0ms
test3: 73.284 ms
test3.1: 102.029 ms
test4: 339.299 ms
test5: 85.527 ms
return Object.values(obj).includes('test1')
你可以试试这个
var obj = {
"a": "test1",
"b": "test2"
};
const findSpecificStr = (obj, str) => {
return Object.values(obj).includes(str);
}
findSpecificStr(obj, 'test1');
你可以试试这个:
function checkIfExistingValue(obj, key, value) {
return obj.hasOwnProperty(key) && obj[key] === value;
}
var test = [{name : "jack", sex: F}, {name: "joe", sex: M}]
console.log(test.some(function(person) { return checkIfExistingValue(person, "name", "jack"); }));
在新版本中,如果 ecma 脚本现在我们可以通过?.
操作来检查 vslues。
它是如此简单和容易哟检查对象或嵌套或对象中的值
var obj = {
"a": "test1",
"b": "test2"
}
if(obj?.a) return "i got the value"
类似地,因为在Javascript中最常用的基元类型是Object
我们也可以使用这个数组、函数等
aFunc = () => { return "gotcha"; }
aFunc?.() // returns gotcha
myArray = [1,2,3]
myArray?.[3] // returns undefined
谢谢
使用 Object.keys() 查找对象中存在值的最佳方法
obj = {
"India" : {
"Karnataka" : ["Bangalore", "Mysore"],
"Maharashtra" : ["Mumbai", "Pune"]
},
"USA" : {
"Texas" : ["Dallas", "Houston"],
"IL" : ["Chicago", "Aurora", "Pune"]
}
}
function nameCity(e){
var finalAns = []
var ans = [];
ans = Object.keys(e).forEach((a)=>{
for(var c in e[a]){
e[a][c].forEach(v=>{
if(v === "Pune"){
finalAns.push(c)
}
})
}
})
console.log(finalAns)
}
nameCity(obj)
> ES2017引入了一个名为Object.values()的新方法,它允许你返回一个数组,其中包含一个对象自己的可枚举属性的值。
您可以执行此操作以检查对象值中是否存在该值:
let found = Object.values(africanCountries).includes('Nigeria');
if (found) {
// code
}
您还可以检查它是否存在于对象键中:
let found = Object.keys(africanCountries).includes('Nigeria');
if (found) {
// code
}
getValue = function (object, key) {
return key.split(".").reduce(function (obj, val) {
return (typeof obj == "undefined" || obj === null || obj === "") ? obj : (_.isString(obj[val]) ? obj[val].trim() : obj[val]);}, object);
};
var obj = {
"a": "test1",
"b": "test2"
};
调用的函数:
getValue(obj, "a");
var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
return Boolean(getValuesOfObject[index] === "test1")
}
Object.values() 方法返回了一个数组(分配给 getValuesOfObject),其中包含给定对象 (obj) 自己的可枚举属性值。数组使用 for
循环进行迭代,以检索每个值(getValuesfromObject 中的值)并返回一个 Boolean() 函数以找出表达式("text1"是循环数组中的值)是否为 true。
对于复杂的结构,这是我的做法:
const obj = {
test: [{t: 't'}, {t1: 't1'}, {t2: 't2'}],
rest: [{r: 'r'}, {r1: 'r1'}, {r2: 'r2'}]
}
console.log(JSON.stringify(obj).includes(JSON.stringify({r1: 'r1'}))) // returns true
console.log(JSON.stringify(obj).includes(JSON.stringify({r1: 'r2'}))) // returns false
检查 javascript 中的每个对象键中是否存在值,并希望返回该对象。
let arr = [{
firstname: "test1",
middlename: "test2",
surname: "test3",
age:20
},
{
firstname: "test4",
middlename: "test5",
surname: "test6",
age:25
},
{
firstname: "test7",
middlename: "test2",
surname: "test8",
age:30
}];
let filteredObjects = arr.filter((item) => Object.keys(item).some(key => item[key] === "test2"));
这将通过比较每个对象中的每个键对来返回对象。
答:
[{
firstname: "test1",
middlename: "test2",
surname: "test3",
age:20
},
{
firstname: "test7",
middlename: "test2",
surname: "test8",
age:30
}]
希望这是有帮助的!
_.has()
方法用于检查路径是否是对象的直接属性。如果路径存在,则返回 true,否则返回 false。
var object = { 'a': { 'b': 2 } }; console.log(_.has(object, 'a.b')); console.log(_.has(object, ['a','b'])); console.log(_.has(object, ['a','b','c']));
输出:真真假
请参考文档:https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Object/values
Object.values
返回一个数组,因此任何数组操作,无论是array.includes
、array.some
、indexOF
都会让你检查该值是否存在。
下面给出了一个简单的答案。
这是有效的,因为每个JavaScript类型都有一个"构造函数"属性在它的原型上"。
let array = []
array.constructor === Array
// => true
let data = {}
data.constructor === Object
// => true
这应该是一个简单的检查。
例 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否存在React Native“;WEB代码安全防护”;
- 验证会话中是否存在对象's数组
- 如何查找值是否存在于二叉树中
- 检查是否存在使用chrome扩展的javascript库
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 测试mongo脚本中是否存在参数
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 检查数组中是否存在字符串值,并返回找到的数组值js
- 如何通过json对象选项卡中的Id来检查对象是否存在
- 检查是否存在任意控制器/操作
- Javascript滑块不滑动,如何判断是否存在JS冲突
- 根据手机上是否存在文件,在jQuery mobile中动态填充列表视图
- javascript测试是否存在两个标志中的任何一个
- 如何使用javascript检查移动sd卡中是否存在文件
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 需要帮助使用JQuery.inArray()检查值是否存在
- 确定元素是否存在
- 使用javascript检查服务器上是否存在html文件
- 是否存在类似ExtJS 4的框架;正常的“;网站