一、需要处理的数据如下:
let listlist = [{"character":"给留守儿童送温暖"}, {"health":"休闲鞋"}, {"health":"运动鞋"}, {"health":"荧光鞋"}, {"artistic":"天空之城钢琴独奏"}, {"character":"环境保护宣传"}, {"character":"成为少先队员"}, {"practice":"A"}, {"practice":"B"}, {"level":"文言文"}, {"level":"牛顿第一定律"}, {"level":"重力加速度"}];
二、分析该数组:可以看出改数组是个对象数组,每个对象里只有一个属性值。数组里有位置不同的相同的对象;数组里也有不同的对象。
三、数据格式处理要求:把数组里不同的对象按各自在相同的对象里的排列先后顺序一一对应匹配成新对象,并最后组成新数组。预期处理后数据格式展示如下:
[{"character":"给留守儿童送温暖", "health":"休闲鞋", "artistic":"天空之城钢琴独奏", "practice":"A", "level":"文言文"},
{"character":"环境保护宣传","health":"运动鞋","artistic":"","practice":"B","level":"牛顿第一定律"},
{"character":"成为少先队员","health":"荧光鞋","artistic":"","practice":"","level":"重力加速度"}];
四、JS中相关格式化代码如下:
let listlist =
[{"character":"给留守儿童送温暖"},{"health":"休闲鞋"},{"health":"运动鞋"},
{"health":"荧光鞋"},{"artistic":"天空之城钢琴独奏"},{"character":"环境保护宣传"},
{"character":"成为少先队员"},{"practice":"A"},{"practice":"B"},
{"level":"文言文"},{"level":"牛顿第一定律"},{"level":"重力加速度"}];
//首先把原对象数组中相同的对象组成一个个同类型数组,如下:
var characterList = listlist.filter(function (item) {
return item.hasOwnProperty("character");;
})
var healthList = listlist.filter(function (item) {
return item.hasOwnProperty("health");
})
var artisticList = listlist.filter(function (item) {
return item.hasOwnProperty("artistic");
})
var practiceList = listlist.filter(function (item) {
return item.hasOwnProperty("practice");
})
var levelList = listlist.filter(function (item) {
return item.hasOwnProperty("level");
})
//定义新数组,用于存放最终的需要格式的一一个对象
var newList = [];
console.log("相同格式数组:",characterList, healthList, artisticList, practiceList, levelList);
//characterList长度大于0 进入
if(characterList.length > 0){
//循环characterList数组,此处根据需要以characterList进行循环来匹配其他的集合
characterList.forEach((item1, index1)=>{
//每次循环,重新定义一个对象,格式如下:
var cuObject = {character: "", health: "", artistic: "", practice: "", level: ""};
//拿当前属性值,并赋值
cuObject.character = item1.character;
//把characterList里面刚才赋值的过的对象,进行剔除,返回剩余的新数组
characterList = characterList.filter(function (item2) {
return item2 != item1;
});
//healthList长度大于0,则进入
if(healthList.length > 0){
//把当前healthList第一个对象进行赋值
cuObject.health = healthList[0].health;
//剔除刚才healthList 赋值过的对象,返回剩余的新数组
healthList = healthList.filter(function (item2) {
return item2 != healthList[0];
});
}
//artisticList长度大于0,则进入
if(artisticList.length > 0){
//把当前artisticList第一个对象进行赋值
cuObject.artistic = artisticList[0].artistic;
//剔除刚才artisticList 赋值过的对象,返回剩余的新数组
artisticList = artisticList.filter(function (item2) {
return item2 != artisticList[0];
});
}
//practiceList长度大于0,则进入
if(practiceList.length > 0){
//把当前practiceList第一个对象进行赋值
cuObject.practice = practiceList[0].practice;
//剔除刚才practiceList 赋值过的对象,返回剩余的新数组
practiceList = practiceList.filter(function (item2) {
return item2 != practiceList[0];
});
}
//levelList长度大于0,则进入
if(levelList.length > 0){
//把当前levelList 第一个对象进行赋值
cuObject.level = levelList[0].level;
//剔除刚才levelList 赋值过的对象,返回剩余的新数组
levelList = levelList.filter(function (item2) {
return item2 != levelList[0];
});
}
//每次循环组成新对象后,把此对象放入新数组中
newList.push(cuObject);
});
}
console.log("想要的newList:", newList);
五、最终处理后的浏览器打印效果图如下: