[英]How do I check if an array contains only one distinct element?
如何检查我的数组是否仅包含一个不同的元素? `
var arr = [1, 1, 1];
var arr2 = [1, 2, 3];
checkIfThereIsOnlyOneElement(arr); //should return true
checkIfThereIsOnlyOneElement(arr2) //should return false;`
使用Set对象:
var arr = [1, 1, 1], arr2 = [1, 2, 3], checkForOne = function(arr){ return (new Set(arr)).size === 1; } console.log(checkForOne(arr)); console.log(checkForOne(arr2));
您可以这样实现:
var arr = [1, 1, 1]; var arr2 = [1, 2, 3]; console.log(checkIfThereIsOnlyOneElement(arr)); console.log(checkIfThereIsOnlyOneElement(arr2)); function checkIfThereIsOnlyOneElement(arr) { arr.sort(); return arr[0] == arr[arr.length -1] }
试试这个简单的实现
function checkIfThereIsOnlyOneElement(arr)
{
var map = {};//create a map
for( var counter = 0; counter < arr.length; counter++)
{
map[ arr[ counter ] ] = true;
if ( Object.keys ( map ).length > 1 ) //check if this map has only one key
{
return false;
}
}
return true;
}
只需检查所有元素是否包含相同的值,一种方法是使用“ lodash”模块的“ uniq”功能:
checkIfThereIsOnlyOneElement(arr){
return _.uniq(arr).length == 1;
}
您可以检查数组中的唯一值。 基于此术语,我们可以实现您的功能:
var arr = [1, 1, 1]; var arr2 = [1, 2, 3]; function checkIfThereIsOnlyOneElement(arr) { return arr.filter(function (item, i, ar) { return ar.indexOf(item) === i; }).length === 1; } console.log(checkIfThereIsOnlyOneElement(arr)); console.log(checkIfThereIsOnlyOneElement(arr2));
此功能有很多非常简单的实现。 让我给您两个,一个是实用的单行代码,另一个是迭代的(性能可能更好)的代码段。
顺便说一句,您的命名很糟糕,应该称为: isArrayOfTheSameElements
// Iterative:
function isArrayOfTheSameElements(arr){
var firstElement = arr[0];
for(var i=1; i < arr.length; i++){
if (arr[i]!==firstElement) {
return false;
}
}
return true;
}
// Functional:
function isArrayOfTheSameElements(arr){
return Object.keys(arr.reduce(function(current, next){
return current[next] = next && current;
}, {})).length <= 1;
}
您可以使用Array#every
并且仅检查agsindt firsr元素。
function checkDistinct(array) { return array.every(function (a, _, aa) { return a === aa[0]; }); } var arr = [1, 1, 1], arr2 = [1, 2, 3]; console.log(checkDistinct(arr)); // true console.log(checkDistinct(arr2)); // false
正如@Nina Scholz所指出的那样,您总是可以正确地喜欢.every()
,但是对于各种情况,您也可以喜欢。
var all = a => a.length-1 ? a[0] === a[1] && all(a.slice(1)) : true; console.log(all([1,1,1,1])); console.log(all([1,1,1,2]));
一旦遇到false
值,就可以减少迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.