Javascript 将索引数组指定为对象值

Javascript 将索引数组指定为对象值,javascript,arrays,loops,indexing,javascript-objects,Javascript,Arrays,Loops,Indexing,Javascript Objects,我有一项任务需要完成,但我真的被卡住了,无法取得进展。赋值由如下元素数组组成 const appleHolderLine = ['Rome', 'Ambrosia', 'Rome', 'RedDelicious', 'Akane','RedDelicious', 'SweeTango', 'RedDelicious', 'RedDelicious', 'Opal', 'Winesap', 'RedDelicious', 'Empire', 'RedDelicious', 'Liberty'];

我有一项任务需要完成,但我真的被卡住了,无法取得进展。赋值由如下元素数组组成

const appleHolderLine = ['Rome', 'Ambrosia', 'Rome', 'RedDelicious', 'Akane','RedDelicious', 'SweeTango', 'RedDelicious', 'RedDelicious', 'Opal', 'Winesap', 'RedDelicious', 'Empire', 'RedDelicious', 'Liberty'];
首先,需要声明一个变量
lineCount
,该变量对数组的每个元素进行计数,并对名为
appleMap
的对象进行引用

挑战在于在数组中循环,数组的元素是没有重复项的对象键,值是数组中特定元素位置的idex数组。请举例说明其外观:

例如:

const appleHolderLine = ['GreenApples', 'RedDelicious','OrangeApples', 'PurpleApples', 'RedDelicious']
console.log (lineCount, appleMap) 
应记录:

5, {'GreenApples':[0], 'RedDelicious': [1,4], 'OrangeApples':[2], 'PurpleApples': [3]}
我目前的进展

var lineCount = 0;
var appleMap = {};
for (let i = 0; i < appleHolderLine.length; i++){
    lineCount++;
    // if element in the array exist in the array  
    appleMap[appleHolderLine[i]] = [i];
}
var lineCount=0;
var appleMap={};
for(设i=0;i

你能给我一个如何解决这个问题的提示吗,我真的被卡住了。

这里不需要额外的变量(行数),只需循环使用值,使用索引访问值,检查该键是否没有任何内容,然后用空数组初始化它,在每次迭代中将索引推送到键

const appleHolderLine=['GreenApples','RedDelicious','orangeaples','purpleaples','RedDelicious']
var appleMap={};
for(设i=0;ilog(appleMap)
基本上,您可以在第一次创建一个空数组,然后继续按下面的方法进行操作

var lineCount = 0;
var appleMap = {};
for (let i = 0; i < appleHolderLine.length; i++){
  lineCount++;
  if(!appleMap[appleHolderLine[i]])
    appleMap[appleHolderLine[i]] = []
  appleMap[appleHolderLine[i]].push(i);

 }
var lineCount=0;
var appleMap={};
for(设i=0;i
您可以使用
Array.prototype.reduce
,这是javascript提供的更高级的构造。请参考下面CodeManiac的回答。 上面的答案是为了澄清你的基本想法,并提示你如何思考


另外,可以直接使用
appleHolderLine.length
获得行数。

我想,最短的答案是函数式答案

const appleHolderLine=['GreenApples','RedDelicious','orangeaples','purpleaples','RedDelicious']
result=appleHolderLine.reduce((a,c,i)=>{if(a[c])a[c].push(i);否则a[c]=[i];返回a;},{})
console.log(结果)