请问大家关于这个数组对象的算法,谢谢大家?

let arr1 = [
    {
        "enter_warehouse_id": "6",
        "goods_sn": "9110011603",
    },
    {
        "enter_warehouse_id": "21",
        "goods_sn": "8011115748541",
    },
    {
        "enter_warehouse_id": "21",
        "goods_sn": "8033129700",
    },
    {
        "enter_warehouse_id": "21",
        "goods_sn": "8011400300",
    },
    {
    
        "enter_warehouse_id": "21",
        "goods_sn": "8011400200",
    }
]

我想判断这个数组对象中,enter_warehouse_id 这个值是否是唯一,如果是唯一,就返回true 如果还存在不相等的 就返回false 就好比arr1 数组中 因为 enter_warehouse_id 存在6 和 21
所以存在不相等情况,就返回false

阅读 1.9k
5 个回答
arr1.every((item, index, arr) => item.enter_warehouse_id === arr[0].enter_warehouse_id)
function isUnique(arr) {
  const uniqueIds = arr.reduce((set, obj) => {
    set.add(obj.enter_warehouse_id);
    return set;
  }, new Set());
  return uniqueIds.size === 1;
}

const arr1 = [
  {
    enter_warehouse_id: "21",
    goods_sn: "8011115748541",
  },
  {
    enter_warehouse_id: "21",
    goods_sn: "8033129700",
  },
  {
    enter_warehouse_id: "21",
    goods_sn: "8011400300",
  },
  {
    enter_warehouse_id: "21",
    goods_sn: "8011400200",
  },
];




console.log(isUnique(arr1)) 
const checkIsEnterWarehouseIdUnique = (arr) => {
  const len = arr.length
   // TODO length 为0时的返回值,根据自身业务特点赋值
  if (len === 0) {
    return 
  } else if (len === 1){
    return true
  } 
  const firstItemId = arr[0].enter_warehouse_id
  for (let i = 1; i < len; i++){
    if (arr[i].enter_warehouse_id !== firstItemId) {
      return false
    }
  }
  return true
}

性能应该强点,哈哈哈

new Set(arr1.map(item=>item.enter_warehouse_id)).size > 1

可以使用:
arr1.every((item, index, arr) => item.enter_warehouse_id === arr[0].enter_warehouse_id)

也可以

arr1.find((item, index, array) => item.enter_warehouse_id !== array[0].enter_warehouse_id)

原理都是一样的

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题