想要檢查對象數組中所有行的值是相同還是對象數組中所有列的值是相同的。我如何有效地使用lodash做到這一點?檢查對象數組中的鍵的值是否相同 - Lodash
[
{row: 0, col: 4},
{row: 0, col: 1},
{row: 0, col: 2}
]
在上述情況下,對象數組中的所有行都是相同的。
想要檢查對象數組中所有行的值是相同還是對象數組中所有列的值是相同的。我如何有效地使用lodash做到這一點?檢查對象數組中的鍵的值是否相同 - Lodash
[
{row: 0, col: 4},
{row: 0, col: 1},
{row: 0, col: 2}
]
在上述情況下,對象數組中的所有行都是相同的。
如果我正確理解約束條件,那麼這個怎麼樣?
var data = [
{row: 0, col: 4},
{row: 0, col: 1},
{row: 0, col: 2},
];
function allTheSame(data, key) {
return data.length && _.every(data, function (item) {
return item[key] === data[0][key];
});
}
console.log(_.any(['row', 'col'], function (key) {
return allTheSame(data, key);
}));
注意_.every
和_.any
兩個保釋出來早,所以這應該是關於儘可能高效。
另請注意,如果數組中沒有元素,則allTheSame
返回false
。如果您想將空列表視爲「完全相同」,則可以切換到return data.length === 0 || _.every(...
。
棘手的部分是試圖檢查列值或行值是否相同,在與lodash相同的迭代。但是,除非你處理的數據量不可言喻,否則這不應該是必要的。假設情況並非如此,這是一個簡單,線性方法:
function isRowOrColSame(data) {
var row = _.every(data, {'row': data[0].row})
var col = _.every(data, {'col': data[0].col})
return (row || col)
}
var data = [
{row: 0, col: 4},
{row: 0, col: 1},
{row: 0, col: 2}
]
console.log(isRowOrColSame(data))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>