获取javascript中包含列表的对象

获取javascript中包含列表的对象,javascript,arrays,dictionary,Javascript,Arrays,Dictionary,我有一个数组[2,2,4,3],我试图获得一个类似{2:[0,1],3:3,4:2}的字典,它基本上是一个字典,包含数组中的项作为键,其索引作为值,如果同一项有多个索引,然后将该值作为数组存储在字典中,或者作为普通值存储 var-arr=[2,2,4,3]; var dict={}; var len=阵列长度; 对于(var i=0;i var-arr=[2,2,4,3]; var dict={}; var len=阵列长度; 对于(var i=0;i var-arr=[2,2,4,3]; v

我有一个数组
[2,2,4,3]
,我试图获得一个类似
{2:[0,1],3:3,4:2}
的字典,它基本上是一个字典,包含数组中的
项作为
键,其
索引作为
值,如果同一项有多个索引,然后将该值作为数组存储在字典中,或者作为普通值存储

var-arr=[2,2,4,3];
var dict={};
var len=阵列长度;
对于(var i=0;i
var-arr=[2,2,4,3];
var dict={};
var len=阵列长度;
对于(var i=0;i
var-arr=[2,2,4,3];
var dict={};
var len=阵列长度;

对于(var i=0;i而言,另一种方法是使用函数
reduce
将值与索引分组

让arr=[2,2,4,3],
结果=arr.reduce((a,c,i)=>{
设电流=a[c];
如果(当前| |当前===0){
if(Array.isArray(current))current.push(i);
否则a[c]=[当前,i];
}否则a[c]=i;
归还
}, {});
console.log(结果);

作为控制台包装{max height:100%!important;top:0;}
另一种方法是使用函数
reduce
将值与索引分组

让arr=[2,2,4,3],
结果=arr.reduce((a,c,i)=>{
设电流=a[c];
如果(当前| |当前===0){
if(Array.isArray(current))current.push(i);
否则a[c]=[当前,i];
}否则a[c]=i;
归还
}, {});
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
它可以非常简单地完成

const dict = array.reduce((result, value, index) => {
  if (!result[value]) {
    result[value] = [index];
  } else {
    result[value].push(index);
  }
  return result;
}, {});
或者,一成不变地:

const dict = array.reduce((result, value, index) => ({
  ...result,
  [value]: [...(result[value] || []), index]
}), {});

这可以很简单地做到

const dict = array.reduce((result, value, index) => {
  if (!result[value]) {
    result[value] = [index];
  } else {
    result[value].push(index);
  }
  return result;
}, {});
或者,一成不变地:

const dict = array.reduce((result, value, index) => ({
  ...result,
  [value]: [...(result[value] || []), index]
}), {});

是否绝对有必要将只出现一次的数字解包,而不是例如“3:[3]”?当然,这是可能的,但为什么呢?扩展到ASDFGerte所说的,这只会使事情变得更困难,并且在试图处理它时可能会导致许多函数出错。如果保持一个1元素数组以保持一致,这会容易得多。仅供参考,字典在Javascript中称为对象。@ASDFGerte,因为我以后必须搜索字典并找到索引与以后执行的操作结果相匹配的数字。@Barmar感谢您提供的信息。是否绝对有必要将只出现一次的数字解包,而不是例如“3:[3]”?当然,这是可能的,但为什么呢?扩展到ASDFGerte所说的,这只会使事情变得更困难,并且在试图处理它时可能会导致许多函数出错。如果保持一个1元素数组以保持一致,这会容易得多。仅供参考,字典在Javascript中称为对象。@ASDFGerte,因为我以后必须搜索字典并找到索引与稍后执行的操作结果相匹配的es。@Barmar感谢您提供的信息感谢您提供的答案这是我一直在寻找的答案我知道这很愚蠢,但您能解释一下为什么您要执行
dict[arr[I]=[dict[arr[I]]];
dict[arr[I]=[];
,然后执行
dict[arr[I]]。
创建一个数组并插入索引
1
,但不是索引
0
,您能解释一下原因吗?第一行正在创建一个新数组,现有值作为数组中的第一个值。调用该行时,
dict[arr[i]==0
,因此
[dict[arr[i]]==0]
。谢谢你的回答这是我一直在寻找的答案。我知道这很愚蠢,但是你能解释一下为什么你这样做吗;
创建一个数组并插入索引
1
,但不是索引
0
,您能解释一下原因吗?第一行正在创建一个新数组,现有值作为数组中的第一个值。调用该行时,
dict[arr[i]==0
,因此
[dict[arr[i]]==0