Javascript 如何将数组中的这些项移动到数组中的对象中?
我有一个数组,它在冒号的左侧包含级别的名称,而在右侧,它很难完成级别 我希望能够将其放入数组中的对象中,以便稍后当我需要检查哪些级别已完成困难时,可以转到数组中的每个对象进行检查 以下是我目前拥有的阵列:Javascript 如何将数组中的这些项移动到数组中的对象中?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个数组,它在冒号的左侧包含级别的名称,而在右侧,它很难完成级别 我希望能够将其放入数组中的对象中,以便稍后当我需要检查哪些级别已完成困难时,可以转到数组中的每个对象进行检查 以下是我目前拥有的阵列: var levels = [ "Level 1 : Easy", "Level 1 : Normal", "Level 1 : Hard", "Level 2 : Easy", "Level 2 : Normal",
var levels = [
"Level 1 : Easy",
"Level 1 : Normal",
"Level 1 : Hard",
"Level 2 : Easy",
"Level 2 : Normal",
"Level 3 : Easy",
"Level 3 : Hard"];
如何将其放入数组中的对象中,使其如下所示:
var levelCompletion = [
{
name: "Level 1",
easy: true,
normal: true,
hard: true
},
{
name: "Level 2",
easy: true,
normal: true,
hard: false
},
{
name: "Level 3",
easy: true,
normal: false,
hard: true
}
];
var levelCompletion = {
"Level 1": {
easy: true,
normal: true,
hard: true
},
"Level 2": {
easy: true,
normal: true,
hard: false
}
}
请注意,“levelCompletion”数组已经存在于我的项目中,但是所有难度值都设置为false,因为我无法理解如何将“levels”数组中的值正确地放入“levelCompletion”数组中
非常感谢您可以从现有的
levelCompletion
生成一个哈希表,并将其用于级别的迭代
在内部,将给定字符串拆分为名称和属性值,检查哈希是否不存在,然后生成具有默认属性的新条目,设置为false
。然后将给定属性设置为true
var级别=[“1级:简单”、“1级:正常”、“1级:困难”、“2级:简单”、“2级:正常”、“3级:简单”、“3级:困难”],
levelCompletion=[],
hash=Object.create(null);
levelCompletion.forEach(函数(o){
散列[o.name]=o;
});
级别。forEach(功能(a){
var parts=a.split(“:”);
如果(!散列[parts[0]]){
散列[parts[0]]={name:parts[0]};
forEach(函数(k){hash[parts[0]][k]=false;});
levelCompletion.push(散列[parts[0]]);
}
散列[parts[0]][parts[1].toLowerCase()]=true;
});
控制台日志(levelCompletion)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以从现有的levelCompletion
生成一个哈希表,并将其用于级别的迭代
在内部,将给定字符串拆分为名称和属性值,检查哈希是否不存在,然后生成具有默认属性的新条目,设置为false
。然后将给定属性设置为true
var级别=[“1级:简单”、“1级:正常”、“1级:困难”、“2级:简单”、“2级:正常”、“3级:简单”、“3级:困难”],
levelCompletion=[],
hash=Object.create(null);
levelCompletion.forEach(函数(o){
散列[o.name]=o;
});
级别。forEach(功能(a){
var parts=a.split(“:”);
如果(!散列[parts[0]]){
散列[parts[0]]={name:parts[0]};
forEach(函数(k){hash[parts[0]][k]=false;});
levelCompletion.push(散列[parts[0]]);
}
散列[parts[0]][parts[1].toLowerCase()]=true;
});
控制台日志(levelCompletion)代码>
。作为控制台包装{max height:100%!important;top:0;}
首先,遍历数组中的每个级别。然后,用冒号将其拆分为一个列表。将级别名称和难度放入字典中
for level in levels:
sublist=level.split(":")
levelCompletion[sublist[0]]=[sublist[1]]
字典的键是“sublist”中的第一个元素,值是第二个元素。对不起,我不做Javascript,我做python,但我希望这能给你一个大概的想法。我也是个新手,所以是的。最后,这并不是说真值和假值只是难度级别本身,你需要使用几个if语句。比如:
if sublist[1]="easy":
levelCompletion[sublist[0]]="easy: " True
首先,遍历数组中的每个级别。然后,用冒号将其拆分为一个列表。将级别名称和难度放入字典中
for level in levels:
sublist=level.split(":")
levelCompletion[sublist[0]]=[sublist[1]]
字典的键是“sublist”中的第一个元素,值是第二个元素。对不起,我不做Javascript,我做python,但我希望这能给你一个大概的想法。我也是个新手,所以是的。最后,这并不是说真值和假值只是难度级别本身,你需要使用几个if语句。比如:
if sublist[1]="easy":
levelCompletion[sublist[0]]="easy: " True
所以你不需要在每一个循环中都使用它
因此,您不需要在每个循环中都使用它。
var级别=[
“一级:简单”,
“一级:正常”,
“一级:硬”,
“二级:简单”,
“二级:正常”,
“三级:简单”,
“三级:硬”
];
var obj={},t,i,keys={};
对于(i=0;i
var级别=[
“一级:简单”,
“一级:正常”,
“一级:硬”,
“二级:简单”,
“二级:正常”,
“三级:简单”,
“三级:硬”
];
var obj={},t,i,keys={};
对于(i=0;i 控制台日志(输出)代码>这是我可能的处理方法,其中一些只是我在转换数组时倾向于.map和.reduce。当输出的元素数始终与输入的元素数完全相同时进行映射,当元素数较少时进行缩减,如此处所示。如果您不熟悉它,它基本上会在每个元素上执行一个函数,从该函数返回的任何内容都会在下一个函数调用中作为参数提供(我的代码中的newLevels参数)