我使用下面给出的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}中的pk
。
pk
列表长度可以是100.我的问题是,我们如何迭代b并设置marked="Y"
pk
在列出的值中的位置?
答案 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;