JS找数组对象有没有某个值

var data =
{
  info:{
      "test": [{
          "selectId": "123",
          "wType": 1
        }, {
          "selectId": "321",
          "wType": 1
        }]
       }
}



我想传入一个值,例如123,然后去遍历test这个数组对象,看有没有selectId符合123

有就回传true 没有就false

这该怎么做?? 要怎么找数组对象的值?

阅读 4.5k
5 个回答

直接用some呀

data.info.test.some(v=>v.selectId==='123')

some的语法

// selectId 要完全等于 '123'
const result=!!data.info.test.find(({selectId})=>selectId==='123')

// selectId 包含 '123'
const result=!!data.info.test.find(({selectId})=>selectId.includes('123'))
function some(obj, value) {
    var ret = false;
    if (obj instanceof Object) {
        for (var key in obj) {
            var val = obj[key];
            if (val === value) return true;
            if (val instanceof Object || Array.isArray(val)) {
                ret = some(val, value);
                if (ret) break;
            }
        }
    } else if (Array.isArray(obj)) {
        for (var i = 0; i < obj.length; i++) {
            var item = obj[i];
            if (item instanceof Object || Array.isArray(item)) {
                ret = some(item, value);
                if (ret) break;
            }
        }
    }
    return ret;
}
console.log(some(data, "123"));

首先你已经知晓了所传变量 data 的数据结构,那么第一步你需要定位并取出你的数组 test:

var arrTest = data['info']['test'];

或者:

var arrTest = data.info.test; 

第二步对 test 进行遍历,把数组下的对象逐个取出来再读取其 selectId 的值,找到一个符合条件的返回 true 即可,遍历结束还没找到,就返回false。遍历的方法很多,一楼采用了宇宙通用的 for 循环,另外还有 for in 、for of 等方法,这里采用 while 关键字示范一遍:

var intLength = arrTest.length;
while(intLength--){
    if(arrTest[intLength]['selectId'] === '123'){
        return true;
    }
}
return false;

当然,这里使用了 return 关键字,因此你需要把整个过程包裹在一个函数体中,形如一楼提供的方法。

我觉得正则来的更快。。。

var data =
{
  info:{
      "test": [{
          "selectId": "123",
          "wType": 1
        }, {
          "selectId": "321",
          "wType": 1
        }]
       }
}
var str = JSON.stringify(data);
if(str.search('"123",') > -1){
    console.log(true);
}else{
    console.log(false);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题