如何在 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>
我使用下面给出的 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>