Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在代码中使用闭包?_Javascript_Closures - Fatal编程技术网

Javascript 如何在代码中使用闭包?

Javascript 如何在代码中使用闭包?,javascript,closures,Javascript,Closures,我有这样一个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=[

我有这样一个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);
在回调中,第二个参数是index,所以您可以使用它,而不要使用不必要的变量cnt,如下所示

风险值数据=[ {数据:a}, {数据:b}, {data:c} ]; data=data.mapfunction元素,索引{ element.id='xx_u'+索引+1; 返回元素; }; 控制台日志数据 在回调中,第二个参数是index,所以您可以使用它,而不要使用不必要的变量cnt,如下所示

风险值数据=[ {数据:a}, {数据:b}, {data:c} ]; data=data.mapfunction元素,索引{ element.id='xx_u'+索引+1; 返回元素; }; 控制台日志数据 检查这个

检查这个

无需使用.map,因为您只修改数组中的对象。Use.forEachvalue,索引=>{}

无需使用.map,因为您只修改数组中的对象。Use.forEachvalue,索引=>{}


如果我的计数器是另一个基于索引的计数器呢?@kishan你能澄清一下你的意思并举个例子吗?@kishan在你当前的问题中,你试图实现计数器并基于它创建id,但这不是必须的,因为在地图中有相同的功能如果我的计数器是基于索引的其他东西怎么办?@kishan你能澄清一下你的意思并举例吗?@kishan在你当前的问题中,你试图实现计数器并基于它创建id,但这是不必要的,因为在地图中有相同的功能,有人做了,我不知道请礼貌地留下评论与否决票。thanks@gurvinder372这是一个过于复杂的解决方案,当您在提供的处理函数中准备好了index参数时。@dev null OP说他的计数器可能不是index。另外,他在问题中提到,我想利用JavaScript闭包来实现。这就是我发布这个解决方案的原因,否则你是对的,索引就足够好了。然而,我认为我做的还不足以保证这么多的反对票。有人做了我不知道的事。请有礼貌地在反对票上发表评论。thanks@gurvinder372这是一个过于复杂的解决方案,当您在提供的处理函数中准备好了index参数时。@dev null OP说他的计数器可能不是index。另外,他在问题中提到,我想利用JavaScript闭包来实现。这就是我发布这个解决方案的原因,否则你是对的,索引就足够好了。然而,我认为我做的还不够,不能保证有这么多的反对票。
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);
var data = [
  {"data":"a"},
  {"data":"b"},
  {"data":"c"}
];

data.forEach(function(obj, index) {
    obj.id = 'xx_' + (index + 1);
});