gpt4 book ai didi

javascript - JS在循环后没有设置变量

转载 作者:数据小太阳 更新时间:2023-10-29 04:49:09 24 4
gpt4 key购买 nike

我不明白为什么在我的函数中不改变变量的值。这是我的代码。

var count = function(datain){
let temparr = [],
countobj = {};

$.each(datain, function(key, val) {
console.log(temparr);
countobj.cost = +$(val).find("[name]").text();
console.log(countobj);
temparr.push(countobj);
console.log(temparr);
});

console.log(temparr);
return temparr;
};

let countarr = count(datain);
console.log(countarr);

ajax 成功时触发的函数的这个函数部分,ajax 我调用一些选择更改。 Datain - ajax 的结果。第一次调用这个函数工作正常,但所有其他火灾都返回我第一次设置 countarr。 key, val 中的所有数据 - 正确,但我不明白为什么“countarr”返回我第一次调用的结果而不是在函数内部重新设置 temparr。谢谢回复!

最佳答案

您在每个循环中重用相同的 countobj 对象,将对该单个对象的引用重复推送到数组中。

您需要在每个循环中创建一个对象:

var count = function(datain) {
let temparr = [],
countobj; // ***
$.each(datain, function(key, val) {
countobj = {}; // ***
console.log(temparr);
countobj.cost = +$(val).find("[name]").text();
console.log(countobj);
temparr.push(countobj);
console.log(temparr);
});
console.log(temparr);
return temparr;
};
let countarr = count(datain);
console.log(countarr);

因为只有一个属性,所以不需要变量。这是没有变量且删除了 console.log 行的相同代码:

var count = function(datain) {
let temparr = [];
$.each(datain, function(key, val) {
temparr.push({cost: +$(val).find("[name]").text()});
});
return temparr;
};
let countarr = count(datain);
console.log(countarr);

或者你甚至可以使用map;并且由于您使用的是 ES2015+(我可以从 let 中看出),我们可以使用箭头函数:

let count = function(datain) {
return datain.map(val => ({cost: +$(val).find("[name]").text()}));
};
let countarr = count(datain);
console.log(countarr);

如果 datain 只是类数组,而不是实际数组,请使用 Array.from 而不是 map:

let count = function(datain) {
return Array.from(datain, val => ({cost: +$(val).find("[name]").text()}));
};
let countarr = count(datain);
console.log(countarr);

关于javascript - JS在循环后没有设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com