如何在代码中使用闭包

how can i utilize closure in my code?

本文关键字:闭包 代码      更新时间:2023-09-26

我有一个类似的JSON:

[
   {"data":"a"},
   {"data":"b"},
   {"data":"c"}
]

使用JavaScript,我想添加一个增量id字段,如下所示:

[
   {"data":"a","id":"xx_1"},
   {"data":"b","id":"xx_2"},
   {"data":"c","id":"xx_3"}
]

但是我想使用的JavaScript闭包

var cnt

在下面的代码中,我该怎么做?

var data=[
    {"data":"a"},
    {"data":"b"},
    {"data":"c"}
    ];
    var cnt=0;
    data.map(function(data){
       data.id="xx_"+cnt;
       cnt++;
    })
console.log(data);

.map回调中,第二个参数是index,所以您可以使用它,而不要使用不必要的变量cnt,比如这个

var data = [
  {"data":"a"},
  {"data":"b"},
  {"data":"c"}
];
data = data.map(function (element, index) {
  element.id = 'xx_' + (index + 1);
  return element;
});
console.log(data);

不需要使用.map,因为您只修改数组中的对象。使用.forEach((value, index) => {})

var data = [
  {"data":"a"},
  {"data":"b"},
  {"data":"c"}
];
data.forEach(function(obj, index) {
    obj.id = 'xx_' + (index + 1);
});

检查这个小提琴

var data=[
        {"data":"a"},
        {"data":"b"},
        {"data":"c"}
];
var counter = (function () { //this is a closure that will return an incremented count value everytime it is called
  var count = 1; // you can initialize to a different value if you want
  return function () {return count += 1;}
})();
data.map(function(data){
  data.id="xx_"+counter(); //calling the counter method
});
console.log(data);