【问题标题】:Check if array does not contain empty objects and matches array length检查数组是否不包含空对象并匹配数组长度
【发布时间】:2020-08-25 00:08:28
【问题描述】:

我正在尝试检查array 1 的长度是否与array 2 的长度匹配,并且array 1 不包含空对象

我的尝试

const matrixValues = _.size(array1,Object.keys(array1.map(item => item)).length !== 0) === array2.length

array2: [{'somevalue': '1'}, {'somethingelse: '2'}, {'somethingmore': '3'}]

array1: [ {'somevalue': '1'}, {'somethingelse': '2'}, {} ] array1这里的长度为3,但是它包含一个空对象,所以我们应该返回false,空对象检查也不应该依赖元素的索引

【问题讨论】:

  • 您忘记了 Array.length 未考虑的负索引元素
  • @MisterJojo - 负索引项不是数组元素。它们只是对象的属性。与由非数字字符串索引的项目相同。

标签: javascript oop ecmascript-6 lodash


【解决方案1】:

比较两个数组的长度,对于第一个数组,使用Array#every 查看每个对象是否至少有一个属性(因此它不为空)。

扩展:如果我在第一个数组(例如array3)中删除所有空对象,则相同的测试可以用Array#filter完成。

let array2 =  [{'somevalue': '1'}, {'somethingelse': '2'}, {'somethingmore': '3'}];
let array1 = [ {'somevalue': '1'}, {'somethingelse': '2'}, {} ];
let array3 =  [{'somevalue': '1'}, {}, {'somethingelse': '2'}, {}, {'somethingmore': '3'}];

let result = (array1.length===array2.length) &&
    array1.every(obj => Object.keys(obj).length);
console.log('Same length without delete empty objects:', result);

let result2 = (array3.filter(obj => Object.keys(obj).length).length === array2.length);
console.log('Same length with delete empty objects:',result2);

【讨论】:

  • OP 可能还想考虑过滤掉使数组长度相同的空对象是否有效
  • 我把它扩展到你的愿望。
猜你喜欢
  • 2020-06-07
  • 2023-04-05
  • 2020-08-09
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 2021-12-21
  • 2015-01-24
  • 2015-01-22
相关资源
最近更新 更多