数组中.在for循环javascript中只推入最后一个变量
array.push only the last variable in a for loop javascript
我实际上在问自己为什么下面的代码不能正常工作,我找到了解决方案,但它有点棘手,我不喜欢这个解决方案
下面是代码和问题:
function powerSet( list ){
var set = [],
listSize = list.length,
combinationsCount = (1 << listSize),
combination;
for (var i = 1; i < combinationsCount ; i++ ){
var combination = [];
for (var j=0;j<listSize;j++){
if ((i & (1 << j))){
combination.push(list[j]);
}
}
set.push(combination);
}
return set;
}
function getDataChartSpe(map) {
var res = {};
for (var i in map) {
console.log("'n'n");
var dataSpe = {certif: false,
experience: 0,
expert: false,
grade: 1,
last: 100,
name: undefined
};
var compMatchList = [];
for (var j in map[i].comps_match) {
var tmp = map[i].comps_match[j];
compMatchList.push(tmp.name)
}
var tmpList = powerSet(compMatchList);
var lol = [];
lol.push(map[i].comps_match);
for (elem in tmpList) {
console.log("mdr elem === " + elem + " tmplist === " + tmpList);
var tmp = tmpList[elem];
dataSpe.name = tmpList[elem].join(" ");
lol[0].push(dataSpe);
}
console.log(lol);
}
return res;
}
现在这里仍然是相同的代码,但运行良好:
function powerSet( list ){
var set = [],
listSize = list.length,
combinationsCount = (1 << listSize),
combination;
for (var i = 1; i < combinationsCount ; i++ ){
var combination = [];
for (var j=0;j<listSize;j++){
if ((i & (1 << j))){
combination.push(list[j]);
}
}
set.push(combination);
}
return set;
}
function getDataChartSpe(map) {
var res = {};
var mapBis = JSON.parse(JSON.stringify(map));
for (var i in map) {
var compMatchList = [];
for (var j in map[i].comps_match) {
var tmp = map[i].comps_match[j];
compMatchList.push(tmp.name)
}
var tmpList = powerSet(compMatchList);
mapBis[i].comps_match = [];
for (elem in tmpList) {
tmpList[elem].sort();
mapBis[i].comps_match.push({certif: false,
experience: 0,
expert: false,
grade: 1,
last: 100,
name: tmpList[elem].join(", ")});
}
}
return mapBis;
}
实际上这对我来说有点失望,因为它完全一样,但是第一个不工作,第二个工作。
所以如果有人能帮我理解我做错了什么,我会很高兴的
ps:对不起,如果我的英语有点坏
在第一个版本中,您构建一个 dataSpe
对象并反复使用它。每次运行:
lol[0].push(dataSpe);
你将同一个对象的引用推入数组。
第二个版本的函数可以工作,因为它每次构建一个新的对象: mapBis[i].comps_match.push({certif: false,
experience: 0,
expert: false,
grade: 1,
last: 100,
name: tmpList[elem].join(", ")});
传递给.push()
的对象字面值将在每次代码运行时创建一个新的、不同的对象。
相关文章:
- 表追加而不附加最后一个元素
- 无法在Ionic select中预先选择最后一个选项
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- Jquery append oly获取循环Rails中的最后一个elemen
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 多维关联数组的最后一个索引
- 将会话变量从一个页面传递到另一个页面
- 如何替换字符串中最后一个出现的变量
- 表读取最后一个变量
- Javascript for loop 作用域采用最后一个变量
- 从本地存储中获取最后一个变量(按时间)
- 当 DOM 更改时,使用最后一个选择器更新变量
- JS将对象推送到变量,将最后一个对象添加到所有元素中
- Jquery each():回调中的变量总是最后一个值
- Javascript变量修改后的最后一个值
- 如何从JavaScript变量中删除第一个和最后一个双引号
- 数组中.在for循环javascript中只推入最后一个变量
- 全局变量只返回循环中最后一个实例的值
- 变量设置为Javascript for循环中的最后一个值