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

How to update Array using $.each in jQuery

我使用下面给出的 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",其中 pk 在 [2,3] 中。 pk 列表长度可以是 100。我的问题是,我们如何遍历 b 并设置 marked="Y" 其中 pk 在列出的值中?

在现代世界中不需要 $.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 作为第一个参数调用回调,然后 然后 值。

尝试

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>