如何检查数组是否仅包含一个唯一元素?
var arr = [1, 1, 1];
var arr2 = [1, 2, 3];
checkIfThereIsOnlyOneElement(arr); //should return true
checkIfThereIsOnlyOneElement(arr2) //should return false;`
如何检查数组是否仅包含一个唯一元素?
var arr = [1, 1, 1];
var arr2 = [1, 2, 3];
checkIfThereIsOnlyOneElement(arr); //should return true
checkIfThereIsOnlyOneElement(arr2) //should return false;`
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));
Array.length
不够吗?为什么要把问题复杂化呢? - kind userArray.length
怎么可能就够了呢? - David[1, 1, 1]
返回true
的原因。 - RomanPerekhrestvar 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]
}
你可以检查数组中的唯一值。基于此术语,我们可以实现您的函数:
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));
Array#every
并且只检查第一个元素。
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
值,停止迭代具有相同的好处。
尝试这个简单的实现
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;
}
这个函数有很多相当简单的实现方式。让我给你两个例子,一个是功能性的一行代码,另一个是迭代式(可能更高效)的片段。
顺便说一下,你的命名非常糟糕,应该叫做: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.length
? - Saravana