在开发中,我们有时会遇到选择匹配的情况,下面的代码模拟的场景是:筛选目标数据流,过滤我们需要的对象中包含的属性值;
现定义一个模拟的数据流:
var newFeature = [
{ "attributes": { "XL": "高中", "RKZS": "52542" } },
{ "attributes": { "XL": "大专", "RKZS": "66458", 'name': 'xxx' } },
{ "attributes": { "XL": "本科", "RKZS": "91015", 'name': 'xxx' } },
{ "attributes": { "XL": "硕士", "RKZS": "39800", 'name': 'xxx' } },
{ "attributes": { "XL": "博士", "RKZS": "13562", 'name': 'xxx' } }
];
我们只需要对象中的学历和编号:
先限定我们需要的键(即筛选字段):
var compareArr = ['XL', 'RKZS'];
然后我们开始我们的循环匹配取值:
var resultArr = new Array();
//第一层循环,取出newFeature里面的值
//进循环之前,先存贮原本newFeature里面的值,用复制实现
var newArr = newFeature.slice();
for (var i = 0; i < newArr.length; i++) {
//定义一个空的目标对象接收值
var obj = { attributes: {} };
//取出里面每一项的对应的值,并且遍历
for (const key in newArr[i].attributes) {
//拿到每一项想要的值之后,遍历其他的数组,假设数组为compareArr
//因为obj这个对象是在for循环外面生成的,在每一次的循环时,我们都是利用的同一个对象,因此会进行覆盖。
for (var j = 0; j < compareArr.length; j++) {
//取出要比对数组的每一项与newFeature的键对比
if (compareArr[j] == key) {
//如果比对相等,就将newFeature里面attributes的键值对存入新数组
resultArr[i] = obj;
resultArr[i].attributes[key] = newArr[i].attributes[key];
}
}
}
}
newFeature = resultArr;
console.log(newFeature);
好了,后台打印的就是我们需要的目标了,可以根据实际情况对上述进行修改调整!