比较JS中对象数组的项



我正在处理一个数组,它是这样的:

var arr = [
{floor: '1', id: '10165', label: 'Elutuba/Köök'},
{floor: '1', id: '10166', label: 'Tuba 1'},
{floor: '1', id: '10167', label: 'Vannituba'},
{floor: '2', id: '10167', label: 'Vannituba'}
];

现在我想比较一下这里的地板项目。如果所有的floor值都相同,那么它应该返回true,并且如果有多个值,如"1"&amp2',则应返回false

以下是我迄今为止尝试过的

var arr = [
{floor: '1', id: '10165', label: 'Elutuba/Köök'},
{floor: '1', id: '10166', label: 'Tuba 1'},
{floor: '1', id: '10167', label: 'Vannituba'},
{floor: '2', id: '10167', label: 'Vannituba'}
];
for (let i=0; i< arr.length; i++){
for (let j=1; j< arr.length; j++){
if( arr[i].floor !== arr[j].floor){
console.log('found');
}else{
console.log('Not found');
}
}
}

我知道这离解决方案还差得很远。但我被卡住了。

一个初始的天真方法。

  • 将检查转换为一个函数,以便可以重用
  • 使用Destructuring赋值提取第一个项的floor属性,并将其重命名为firstFloor
  • 使用Array.prototype.every()检查是否所有项目都符合特定条件

const allSameFloors = (array = []) => {
const [{
floor: firstFloor
}] = array;
return array.every(({
floor
}) => floor === firstFloor);
};
console.log(
allSameFloors(
[{
floor: '1',
id: '10165',
label: 'Elutuba/Köök'
},
{
floor: '1',
id: '10166',
label: 'Tuba 1'
},
{
floor: '1',
id: '10167',
label: 'Vannituba'
},
{
floor: '2',
id: '10167',
label: 'Vannituba'
}
]
)
);
console.log(
allSameFloors(
[{
floor: '1',
id: '10165',
label: 'Elutuba/Köök'
},
{
floor: '1',
id: '10166',
label: 'Tuba 1'
},
{
floor: '1',
id: '10167',
label: 'Vannituba'
},
{
floor: '1',
id: '10167',
label: 'Vannituba'
}
]
)
);

很可能有更好的方法,但这里有一个快速解决方案。

function FloorSameValue(arr){
values = [];
for (obj of arr){
if (!values.includes(obj.floor)){
values.push(obj.floor);
}
}
return values.length === 1;
}
var arr = [
{floor: '1', id: '10165', label: 'Elutuba/Köök'},
{floor: '1', id: '10166', label: 'Tuba 1'},
{floor: '1', id: '10167', label: 'Vannituba'},
{floor: '2', id: '10167', label: 'Vannituba'}
];
console.log(FloorSameValue(arr))
//false

实际上有很多方法可以实现这一点,在我之后的答案可能会提供更好的答案,所以我只给你一个,以防你着急

array.every的引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

// empty array always return true so need arr.length logic if we use array.every + empty array + want to return false for empty array, check more : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
const isFloorSame = (arr) => arr.length ? arr.every(({ floor }, i) => {
if (i === 0) return true // no previous value to compare
return floor === arr[i - 1].floor
}) : false;
const differentFloorArr = [
{floor: '1', id: '10165', label: 'Elutuba/Köök'},
{floor: '1', id: '10166', label: 'Tuba 1'},
{floor: '1', id: '10167', label: 'Vannituba'},
{floor: '2', id: '10167', label: 'Vannituba'}
];
const sameFloorArr = [
{floor: '2', id: '10165', label: 'Elutuba/Köök'},
{floor: '2', id: '10166', label: 'Tuba 1'},
{floor: '2', id: '10167', label: 'Vannituba'},
{floor: '2', id: '10167', label: 'Vannituba'}
];
console.log('differentFloorArr', isFloorSame(differentFloorArr));
console.log('sameFloorArr', isFloorSame(sameFloorArr));
console.log('emptyArray', isFloorSame([]));

for( var i = 0 ; i < arr.length;i++)
{
var myval = arr[i].floor;
for (var j = i+1 ; j < arr.length ; j++)
{
if (arr[i].floor !== arr[j].floor)
{          
alert("false");
}
}
}
enter code here

最新更新