如何在jQuery中使用$ .each更新数组

时间:2016-06-20 12:04:46

标签: jquery arrays each

我使用下面给出的JSON.parse()解析了一个数组。

var b = [{"pk":"1","name":"Ali","marked":"N" },
{"pk":"2","name":"Zeeshan","marked":"N" },
{"pk":"3","name":"Tariq","marked":"N" }]

此列表包含大约4000条记录,现在我想要更新marked = "Y" {2,3}中的pkpk列表长度可以是100.我的问题是,我们如何迭代b并设置marked="Y" pk在列出的值中的位置?

2 个答案:

答案 0 :(得分:1)

在现代世界中不需要$.each,数组有forEach等等(如果你真的需要支持像IE8这样的过时浏览器,你可以使用它们。)

如果pk可以包含100个条目而您正在过滤4,000条记录,那么我将构建一个pk值的地图并使用它。这是一个ES5方法:

var b = [
  {"pk":"1","name":"Ali","marked":"N" },
  {"pk":"2","name":"Zeeshan","marked":"N" },
  {"pk":"3","name":"Tariq","marked":"N" }
];
var pk = ["2", "3"];

// Build the "map"
var map = Object.create(null);
pk.forEach(function(value) {
  map[value] = true;
});

// Mark relevant entries
b.forEach(function(entry) {
  if (map[entry.pk]) {
    entry.marked = "Y";
  }
});
console.log(b);

这可以避免不断调用pk.indexOf(entry.pk)来查看是否应该标记条目,这需要每次重新扫描数组。相反,它利用了JavaScript引擎的对象属性查找代码,该代码在现代浏览器上进行了高度优化(即使没有优化它可能是某种哈希映射或类似的,但它们现在优化了)。

如果确实想要使用$.each,只需更改

即可
pk.forEach(function(value) {

$.each(pk, function(_, value) {
// Note ------------^

以后的b循环相同。 $.each使用条目的 index 作为第一个参数调用回调,然后该值。

答案 1 :(得分:1)

尝试



var b = [
  {"pk":"1","name":"Ali","marked":"N" },
  {"pk":"2","name":"Zeeshan","marked":"N" },
  {"pk":"3","name":"Tariq","marked":"N" }
];
var condition = ["2", "3"];

$.each(b,function(index,value){
  if(condition.indexOf(value.pk) > -1){
     value.marked = "Y";
  }
});

console.log(b);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;