我有一个任务需要我做,但是我真的很困并且无法取得进展。分配包含这样的元素数组
const appleHolderLine = ['Rome', 'Ambrosia', 'Rome', 'RedDelicious', 'Akane','RedDelicious', 'SweeTango', 'RedDelicious', 'RedDelicious', 'Opal', 'Winesap', 'RedDelicious', 'Empire', 'RedDelicious', 'Liberty'];
首先,需要声明一个变量lineCount
,该变量对数组的每个元素都有效,并需要引用一个名为appleMap
的对象。
挑战在于遍历数组,数组的元素将是没有重复的对象键,而值将是数组的特定元素位置的idexe数组。举例说明:
示例:
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];
}
能不能给我一个解决方法的提示,我真的很困惑。
答案 0 :(得分:1)
基本上,您可以第一次创建一个空数组,然后像下面一样继续推送
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);
}
您可以使用Array.prototype.reduce
,这是javascript提供的更高级的构造。请同样参考下面CodeManiac的回答。
上面的答案是为了阐明基本思想并提示您如何思考
此外,可以直接使用appleHolderLine.length
获得lineCount。
答案 1 :(得分:0)
这里您不需要额外的变量(行数),只需循环使用值,使用索引访问值,检查该键是否不存在,然后使用空数组初始化,将索引推入即可每次迭代中的关键
const appleHolderLine = ['GreenApples', 'RedDelicious','OrangeApples', 'PurpleApples', 'RedDelicious']
var appleMap = {};
for (let i = 0; i < appleHolderLine.length; i++){
if(!appleMap[appleHolderLine[i]]){
appleMap[appleHolderLine[i]] = []
}
appleMap[appleHolderLine[i]].push(i);
}
console.log(appleMap)
您可以简单地使用reduce
const appleHolderLine = ['GreenApples', 'RedDelicious','OrangeApples', 'PurpleApples', 'RedDelicious']
let final = appleHolderLine.reduce((op,inp,i)=>{
op[inp] = op[inp] || []
op[inp].push(i)
return op
},{})
console.log(final)
行数与数组长度let lineCount = appleHolderLine.length
答案 2 :(得分:-1)
我想,最简短的答案是实用的答案。
$conn = new PDO(sprintf("mysql:host=%s;dbname=%s", "localhost", "kosan_finder"), "root", "");
$sql = "CALL getChats(?)";
$stmt = $conn->prepare($sql);
$stmt->bindValue(1, $PostData->sender);
$stmt->execute();
echo "Result stmt: ";
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
echo "\nError info: ";
print_r($stmt->errorInfo());
但是我不确定您是否期望提供功能性的解决方案。不过,您可能会发现它很有用。这个想法是const appleHolderLine = ['GreenApples', 'RedDelicious','OrangeApples', 'PurpleApples', 'RedDelicious']
result = appleHolderLine.reduce((a,c,i) => { if(a[c]) a[c].push(i); else a[c]=[i]; return a; }, {})
console.log(result)
方法从一个空对象开始,并遍历数组。在每次迭代中,它都会检查当前元素reduce
是否已经是累加器c
的字段。如果是这样,则将其索引a
添加到特定字段,如果不是,则使用当前元素作为名称初始化该字段,并将索引作为单元素数组作为值初始化