1.将数组根据目标键名取出或获取排除键名以外的数据
arrToKeyData = (arr = [], keys = [], exclude = false) => {
let data = [];
arr.map((item, index) => {
data[index] = {};
let keyNames = Object.keys(item);
keys.map(key => {
keyNames.map(keyName => {
if (keyName === key && !exclude) {
data[index][keyName] = item[key]
} else if (keyName !== key && exclude){
data[index][keyName] = item[key]
}
})
});
});
return data
};
let D = [
{key: 1, value: "11", name: 'AAAA'},
{key: 2, value: "12", name: 'BBBB'},
];
console.log("按键名获取:", arrToKeyData(D, ["key"]));
console.log("获取键名以外的:", arrToKeyData(D, ["key"], true));
2.循环两个数组,根据条件返回新的数组(支持多个条件)
arrsByKey = (arr = [], arr2 = [], keys = []) => {
let list = [];
arr.map(item => {
let num = 0;
arr2.map(subItem => {
keys.map(key => {
item[key] == subItem[key] && num++
});
});
num === keys.length && list.push({...item})
});
return list
}
let A = [
{key: 1, value: "11", name: 'AAAA'},
{key: 2, value: "12", name: 'BBBB'},
];
let B = [
{key: 1, value: "11"},
{key: 2, value: "22"},
];
console.log("单个条件合并:", arrsByKey(A, B, ["key"]));
console.log("多个条件合并:", arrsByKey(A, B, ["key", "value"]));
3.将数组按键名取出单一值(可通过条件过滤)
static arrDataBy(arr, key, where) {
let data = [];
for (let i = 0; i < arr.length; i++) {
let val = arr[i][key];
if (where && typeof where === "function") {
let B = where(arr[i]);
if (B) {
data.push(val)
}
} else {
data.push(val)
}
}
return data
}
let A = [
{key: 1, value: "11", name: 'AAAA'},
{key: 2, value: "12", name: 'BBBB'},
];
console.log("直接取出:", arrDataBy(A, "key"));
console.log("通过方法过滤:", arrsByKey(A, "key", (item) => (item.value === "11"))));