通过过滤器数组在对象数组上设置 属性
Set a property on an array of objects by an array of filters
假设我有以下数组:
var filters = ["id-12", "id-13", "id-50"];
然后是数组对象:
var markers = [
{
markerId: 'id-12',
visible: true,
},
{
markerId: 'id-13',
visible: true,
},
{
markerId: 'id-50',
visible: true,
},
{
markerId: 'id-132',
visible: true,
},
{
markerId: 'id-1512',
visible: true,
}
];
我想根据过滤器数组中的内容将每个对象的 属性 可见设置为 true,当其他对象与过滤器不匹配时设置为 false。
我试着用一个简单的 for 循环来做到这一点,但问题是过滤器的顺序在每次迭代中都不匹配,所以并不是所有的标记都可以设置为可见。
在此上下文中尝试使用 Array.prototype.map()
,
markers = markers.map(function(itm){
return (itm.visible = (filters.indexOf(itm.markerId) > -1) , itm)
});
DEMO
或者您可以使用简单的 for
循环,
for(var i=0; i<markers.length; i++) {
markers[i].visible = filters.indexOf(markers[i].markerId) > -1;
}
使用map
函数
var filters = ["id-12", "id-13", "id-50"];
var markers = [ { markerId: 'id-12', visible: true, }, { markerId: 'id-13', visible: true, }, { markerId: 'id-50', visible: true, }, { markerId: 'id-132', visible: true, }, { markerId: 'id-1512', visible: true, } ];
markers = markers.map(function(e) {
if (filters.indexOf(e.markerId) > -1)
e.visible = true;
else
e.visible = false;
return e;
});
document.write('<pre>' + JSON.stringify(markers, 0, 2) + '</pre>');
或forEach
函数与ES2015
标准
markers.forEach(e => e.visible = filters.indexOf(e.markerId) > -1);
您想对 markers
中的每个元素使用 map
并设置可见 markerId
是否在 filters
数组中:
markers = markers.map(function(m) {
m.visible = filters.indexOf(m.markerId) > -1;
return m;
});
不需要Array#map()
and a superfluous assignment. Just use Array#forEach()
。
var markers = [{ markerId: 'id-12', visible: true, }, { markerId: 'id-13', visible: true, }, { markerId: 'id-50', visible: true, }, { markerId: 'id-132', visible: true, }, { markerId: 'id-1512', visible: true, }],
filters = ["id-12", "id-13", "id-50"];
markers.forEach(function (a) {
a.visible = !!~filters.indexOf(a.markerId);
});
document.write('<pre>' + JSON.stringify(markers, 0, 4) + '</pre>');
假设我有以下数组:
var filters = ["id-12", "id-13", "id-50"];
然后是数组对象:
var markers = [
{
markerId: 'id-12',
visible: true,
},
{
markerId: 'id-13',
visible: true,
},
{
markerId: 'id-50',
visible: true,
},
{
markerId: 'id-132',
visible: true,
},
{
markerId: 'id-1512',
visible: true,
}
];
我想根据过滤器数组中的内容将每个对象的 属性 可见设置为 true,当其他对象与过滤器不匹配时设置为 false。
我试着用一个简单的 for 循环来做到这一点,但问题是过滤器的顺序在每次迭代中都不匹配,所以并不是所有的标记都可以设置为可见。
在此上下文中尝试使用 Array.prototype.map()
,
markers = markers.map(function(itm){
return (itm.visible = (filters.indexOf(itm.markerId) > -1) , itm)
});
DEMO
或者您可以使用简单的 for
循环,
for(var i=0; i<markers.length; i++) {
markers[i].visible = filters.indexOf(markers[i].markerId) > -1;
}
使用map
函数
var filters = ["id-12", "id-13", "id-50"];
var markers = [ { markerId: 'id-12', visible: true, }, { markerId: 'id-13', visible: true, }, { markerId: 'id-50', visible: true, }, { markerId: 'id-132', visible: true, }, { markerId: 'id-1512', visible: true, } ];
markers = markers.map(function(e) {
if (filters.indexOf(e.markerId) > -1)
e.visible = true;
else
e.visible = false;
return e;
});
document.write('<pre>' + JSON.stringify(markers, 0, 2) + '</pre>');
或forEach
函数与ES2015
标准
markers.forEach(e => e.visible = filters.indexOf(e.markerId) > -1);
您想对 markers
中的每个元素使用 map
并设置可见 markerId
是否在 filters
数组中:
markers = markers.map(function(m) {
m.visible = filters.indexOf(m.markerId) > -1;
return m;
});
不需要Array#map()
and a superfluous assignment. Just use Array#forEach()
。
var markers = [{ markerId: 'id-12', visible: true, }, { markerId: 'id-13', visible: true, }, { markerId: 'id-50', visible: true, }, { markerId: 'id-132', visible: true, }, { markerId: 'id-1512', visible: true, }],
filters = ["id-12", "id-13", "id-50"];
markers.forEach(function (a) {
a.visible = !!~filters.indexOf(a.markerId);
});
document.write('<pre>' + JSON.stringify(markers, 0, 4) + '</pre>');