如何创建数组最常见值的索引数组(应排除空字符串)。我的数组总是大小为3,这应该可以简化问题,但我还没有找到解决这个问题的方法。我使用的是JavaScript(ES5),因此无法访问Set。
E.g。以下都将返回一个空数组(考虑""作为一个空字符串):
rdlc
以下内容将返回:
[" ", " ", " "] => []
["a", " ", " "] => []
[" ", "b", " "] => []
[" ", " ", "c"] => []
["a", "b", " "] => []
[" ", "b", "c"] => []
["a", " ", "c"] => []
["a", "b", "c"] => []
答案 0 :(得分:3)
您可以使用reduce function和filter function
//["c", "b", "c"] => [0, 2]
var arr = ["c", "b", "c"];
function a(arr) {
var result = arr.reduce(function(acc, cur, index) {
if(cur == ' ' || cur == '') return acc; // skip if value - empty string
if (!acc.map[cur]) { // if new value
acc.map[cur] = [index]; // add index to map
acc.result.push(acc.map[cur]);//add index to result array
} else {
acc.map[cur].push(index); // push index to result array
}
return acc;
}, {
map: {},
result: []
}).result.filter(function(el){ // get arrays only with length greater than 1
return el.length > 1;
})
.reduce(function(acc, cur) { // get array with max length
return acc.length > cur.length ? acc : cur;
},[]);
document.getElementById('r').innerHTML += JSON.stringify(arr) + ' => ' + JSON.stringify(result) + '<br />';
}
a([" ", " ", " "]);
a(["a", " ", " "]);
a([" ", "b", " "]);
a([" ", " ", "c"]);
a(["a", "b", " "]);
a([" ", "b", "c"]);
a(["a", " ", "c"]);
a(["a", "b", "c"]);
a(["a", "a", " "]);
a(["a", "a", "c"]);
a([" ", "b", "b"]);
a(["a", "b", "b"]);
a(["c", " ", "c"]);
a(["c", "b", "c"]);
a(["c", "c", "c"]);
&#13;
<div id='r'></div>
&#13;
答案 1 :(得分:0)
这有效:
function myFunc(arr){
var copy = arr.slice(0), val, j;
var buffer = [];
for(i=0; i<3; i++){
val = arr[i];
if(val == '' || val == ' '){
continue;
}else{
delete copy[i];
if((j = copy.indexOf(val)) != -1){
if(buffer.indexOf(i) == -1) buffer.push(i);
buffer.push(j);
}
}
}
document.body.innerHTML = JSON.stringify(arr) + ' => ' + JSON.stringify(buffer);
return buffer;
}
myFunc(["c", "a", "a"]);