Set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员),操作方法有:add(value)、delete(value)、has(value)、clear();遍历方法有:keys()、values()、entries()、forEach()
1、ES6——new Set方法
const myArray = [1,1,2,2,3,3,4,4,5,5] console.log([...new Set(myArray )]);
2、Array.from(该方法可以将 Set 结构转为数组)
function dedupe(array) { return Array.from(new Set(array)); } dedupe([1, 1, 2, 3])
let aa = { a: 1, b: 2, c: 3 };
let dd = { d: 4, c: 5, b: 6 };
console.log({ ...aa, ...dd });
let cc = [1, 2, 3, 4];
let bb = [2, 5, 1, 6, 7];
console.log([...cc, ...bb]);
let ccc = [{ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }];
let bbb = [{ a: 2 }, { b: 5 }, { c: 1 }, { d: 6 }, { f: 7 }];
console.log([...ccc, ...bbb]);
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。
findIndex() 方法为数组中的每个元素都调用一次函数执行:
当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。
如果没有符合条件的元素返回 -1
Array.isArray() 用于确定传递的值是否是一个 Array。
Array.isArray([1, 2, 3]);
// true
Array.isArray({foo: 123});
// false
Array.isArray("foobar");
// false
Array.isArray(undefined);
// false
Array.from() 方法从一个类似数组或可迭代对象中创建一个新的,浅拷贝的数组实例。
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]
对象内容合并
Object.keys() - 获得对象中所有的键名,以数组的形式返回
var obj = { a:1,b:2 };
var names = Object.keys(obj);//['a', 'b']
-----------------------------------
Object.values() - 获得对象中所有的值内容,以数组的形式返回
var obj = { a:1,b:2 };
var values = Object.values(obj);//[1, 2]
-----------------------------------
Object.entries() - 获得对象中所有的成员数据,以数组的形式返回,成员的内容也是数组形式
var obj = { a:1,b:2 };
var values = Object.entries(obj);//[['a',1], ['b',2]]
let result = [
{
"campaignId" : 1640113690688517,
"campaignName" : "AND-TW-TTH",
"status" : "CAMPAIGN_STATUS_DISABLE",
"adgroups" : [ {
"advertiserId" : 1639377170863109,
"adgroupId" : 1640113691245574,
"adgroupName" : "3001-AND-TW-1354-M/F-Broad-o4-190726-TTH-Tiktok",
"campaignId" : 1640113690688517,
"campaignName" : "AND-TW-TTH",
"totalBudget" : null,
"dailyBudget" : 5000,
"scheduleStartTime" : "2019-07-26 09:35:32",
"scheduleEndTime" : "2020-07-26 09:35:32",
"pacing" : "PACING_MODE_SMOOTH",
"billingEvent" : "CPA",
"bidType" : null,
"bid" : 0}]
},
{
"campaignId" : 1640113690688518,
"campaignName" : "AND-TW-TTH",
"status" : "CAMPAIGN_STATUS_DISABLE",
"adgroups" : [ {
"advertiserId" : 1639377170863109,
"adgroupId" : 1640113691245578,
"adgroupName" : "3001-AND-TW-1354-M/F-Broad-o4-190726-TTH-Tiktok",
"campaignId" : 1640113690688517,
"campaignName" : "AND-TW-TTH",
"totalBudget" : null,
"dailyBudget" : 5000,
"scheduleStartTime" : "2019-07-26 09:35:32",
"scheduleEndTime" : "2020-07-26 09:35:32",
"pacing" : "PACING_MODE_SMOOTH",
"billingEvent" : "CPA",
"bidType" : null,
"bid" : 0 }]
},
]
// map 版本
const forMatterResultMap = (data) => {
return data.map(({ campaignId, campaignName, adgroups = [] }) => {
let adgroupsFormatter = adgroups.map (({ adgroupId, adgroupName }) => {
return {
adgroupId,
adgroupName
}
})
return {
campaignId,
campaignName,
adgroups: adgroupsFormatter
}
})
}
// reduce 版本
const forMatterResultReduce = (data) => {
return data.reduce((acc, { campaignId, campaignName, adgroups = [] }) => {
let adgroupsFormatter = adgroups.reduce((acc, { adgroupId, adgroupName }) => {
return acc.concat({
adgroupId,
adgroupName
})
}, [])
return acc.concat({
campaignId,
campaignName,
adgroups: adgroupsFormatter
})
}, [])
}
// 递归
const forMatterRec = (type, data) => {
return data.reduce((acc, crr) => {
let obj = {
[`${type}Id`]: crr[`${type}Id`],
[`${type}Name`]: crr[`${type}Name`],
}
if (crr.adgroups) {
obj.adgroups = forMatterRec('adgroup', crr.adgroups)
}
return acc.concat(obj)
}, [])
}
forMatterResultReduce(result)
forMatterResultMap(result)
forMatterRec('campaign', result)