如何通过指定信息查找到其所在的位置?

const arr= [
  {
    "id": 1,
    "info": {
      "name": "aaa",
      "age": 12,
      "message": "aaaaa\n\dbbbb."
    }
  },
  {
    "id": 2,
    "info": {
      "name": "bbb",
      "age": 33,
      "message": "casde."
    }
  }
]

1、 {id:2} 查找到上述数组中的位置。
2、{name: "aaa"} 查找到 arr[0] 的位置呐?

阅读 1.8k
5 个回答

不就是用 .findIndex() 方法吗? Array.prototype.findIndex() - JavaScript | MDN

const arr= [
  {
    "id": 1,
    "info": {
      "name": "aaa",
      "age": 12,
      "message": "aaaaa\n\dbbbb."
    }
  },
  {
    "id": 2,
    "info": {
      "name": "bbb",
      "age": 33,
      "message": "casde."
    }
  }
]
// 通过ID查找位置
const findIndexById = arr.findIndex(item=>item.id === 2)
console.log('findIndexById', findIndexById)
// log 'findIndexById' 1

// 通过name查找位置
const findIndexByName = arr.findIndex(item => item.info.name === "aaa")
console.log('findIndexByName', findIndexByName)
// log 'findIndexByName' 0

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

查找id

const index = arr.map(item => item.id).indexOf(2)
console.log(arr[index])

查找name

const index = arr.map(item => item.info.name).indexOf('aaa')
console.log(arr[index])
  console.log(s(arr, { id: 2 }));
  console.log(s(arr, { name: "aaa" }));
  function s (list = [], obj = {}) {
    let keys = Object.keys(obj)
    if (keys[0] == 'id') {
      for (let [index, item] of list.entries()) {
        if (item.id == obj.id) {
          return index
        }
      }
    } else {
      for (let [index, item] of list.entries()) {
        if (item.info[keys[0]] == obj[keys[0]]) {
          return index
        }
      }
    }
    return -1
  }
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
  const matchKeyAndValue = (obj,target) => {
    if(Object.entries(target).length !== 1) return false
    const targetKey = Object.entries(target)[0][0]
    const targetValue = Object.entries(target)[0][1]
    if(obj.hasOwnProperty(targetKey) && typeof obj[targetKey] === 'string' || typeof obj[targetKey] === 'number'){
        return obj[targetKey] === targetValue
    }else if(typeof obj[targetKey] === 'object'){
        matchKeyAndValue(obj[targetKey],targetKey,targetValue)
    }
    return false
  }

  const findIndex = (arr,target)=> {
    if(typeof target !== 'object') return -1
    let res;
    arr.forEach((v,k)=>{
        if(matchKeyAndValue(v,target)){
            res = k
        }
    })
    return res
  }

  const res = findIndex(arr,{id:2})
  console.log(res);

lodash里面的findIndex

<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>
<script>
  const arr = [
    {
      "id": 1,
      "info": {
        "name": "aaa",
        "age": 12,
        "message": "aaaaa\n\dbbbb."
      }
    },
    {
      "id": 2,
      "info": {
        "name": "bbb",
        "age": 33,
        "message": "casde."
      }
    }
  ]
  var index = _.findIndex(arr, { 'id': 2 }) // 1
  var indexName = _.findIndex(arr, { 'info': { name: "aaa" } }); // 0
</script>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题