在JavaScript中创建数组最常用值的索引数组
如何创建数组中最常用值的索引数组(应排除空字符串)。我的数组大小总是3,这应该可以简化问题,但我还没有找到解决这个问题的方法。我使用的是JavaScript(ES5),因此无法访问Set 例如,以下各项都将返回空数组(将“”视为空字符串): 以下内容将返回:在JavaScript中创建数组最常用值的索引数组,javascript,arrays,Javascript,Arrays,如何创建数组中最常用值的索引数组(应排除空字符串)。我的数组大小总是3,这应该可以简化问题,但我还没有找到解决这个问题的方法。我使用的是JavaScript(ES5),因此无法访问Set 例如,以下各项都将返回空数组(将“”视为空字符串): 以下内容将返回: ["a", "a", " "] => [0, 1] ["a", "a", "c"] => [0, 1] [" ", "b", "b"] => [1, 2] ["a", "b", "b"] => [1, 2] ["c"
["a", "a", " "] => [0, 1]
["a", "a", "c"] => [0, 1]
[" ", "b", "b"] => [1, 2]
["a", "b", "b"] => [1, 2]
["c", " ", "c"] => [0, 2]
["c", "b", "c"] => [0, 2]
["c", "c", "c"] => [0, 1, 2]
您可以使用和
/[“c”,“b”,“c”]=>[0,2]
var arr=[“c”、“b”、“c”];
功能a(arr){
var结果=arr.REDUCT(功能(acc、cur、索引){
if(cur=''|cur='')返回acc;//跳过if值-空字符串
if(!acc.map[cur]){//if新值
acc.map[cur]=[index];//向映射添加索引
acc.result.push(acc.map[cur]);//向结果数组添加索引
}否则{
acc.map[cur].push(index);//将索引推送到结果数组
}
返回acc;
}, {
映射:{},
结果:[]
}).result.filter(函数(el){//仅获取长度大于1的数组
返回el.length>1;
})
.reduce(函数(acc,cur){//get具有最大长度的数组
返回acc.length>cur.length?acc:cur;
},[]);
document.getElementById('r').innerHTML+=JSON.stringify(arr)+'=>'+JSON.stringify(结果)+'
';
}
a([“”,“”,“”]);
a([“a”、“a”、“a”);
a([“”,“,”b“,”);
a([“”,“”,“,”c“]);
a([“a”、“b”、“b”);
a([,“b”,“c”);
a([“a”、“a”、“c”);
a([“a”、“b”、“c”);
a([“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”)代码>
此功能:
函数myFunc(arr){
var copy=arr.slice(0),val,j;
var缓冲区=[];
for(i=0;Isimerar:你介意解释一下左右结果数组之间的区别吗?@AGE,用左值表示,用右索引表示,效果很好。其他答案也很好,但这个似乎最简单。
["a", "a", " "] => [0, 1]
["a", "a", "c"] => [0, 1]
[" ", "b", "b"] => [1, 2]
["a", "b", "b"] => [1, 2]
["c", " ", "c"] => [0, 2]
["c", "b", "c"] => [0, 2]
["c", "c", "c"] => [0, 1, 2]