我无法理解为什么我的函数不会改变变量的值.在这里我的代码.
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我调用了一些select变化. Datain – ajax的结果.第一次调用此函数工作正常,但所有另一个火灾返回我第一次设置countarr. key,val中的所有数据都是正确的,但是我无法理解为什么“countarr”会返回第一次调用的结果而不是在函数内部重新设置temparr.
谢谢你的答复!
解决方法
您在每个循环上重复使用相同的countobj对象,将对该单个对象的引用重复推送到数组中.
您需要在每个循环上创建一个新对象:
var count = function(datain) { let temparr = [],countobj; // *** $.each(datain,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,val) { temparr.push({cost: +$(val).find("[name]").text()}); }); return temparr; }; let countarr = count(datain); console.log(countarr);
或者你甚至可以使用地图;既然你正在使用ES2015(我可以告诉我们),我们可以使用箭头功能:
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);