我想用这些参数创建这个JS函数:
transform([{a:1, b:'1', c:true},{a:'1', b:2, c:3, d:false}, {a:1, c:'test'}], ['a','b','c']);
第一个参数是一个对象数组
第二个是键数组。
我想得到这个输出对象:
{a:[1, '1', 1], b:['1', 2],c:[true, 3, 'test']}
如您所见,第二个参数成为创建对象的键 以及这些键下的所有值组合在一起。
也许可以选择将唯一参数传递给函数并获取它(删除重复值):
{a:[1, '1'], b:['1', 2], c:[true, 3, 'test']}
快速和/或优雅的方式是什么?
是否有任何lodash /下划线帮助器?
作为一个额外的通才。输入(第一个参数)如何是具有嵌套级别的通用集合(嵌套级别的数组或对象的数组或对象)? 感谢。
答案 0 :(得分:0)
试试这个:
function transform(data,keys){
let results = {};
//loop all you keys
keys.forEach(index => {
//loop your arrays
data.forEach(element => {
//if there is a match add the key to the results object
if(index in element) {
if(!(index in results)) results[index] = [];
//check if a value already exists for a given key.
if(!(element[index] in results[index])) results[index].push(element[index]);
}
});
});
return results;
}
console.log(transform([{a:1,b:'1',c:true},{a:'1',b:2,c:3,d:false},{a:1,c:'test'}], ['a','b','c']));
答案 1 :(得分:0)
您可以遍历键数组并将此键传递给另一个将使用forEach
方法的函数。使用getMatchedKeyValues
的{{1}}将返回其键匹配
forEach

答案 2 :(得分:0)
<!DOCTYPE html>
<html lang="de" style="width: 100%; height: 100%; margin: 0; padding: 0;">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body style="width: 100%; height: 100%; margin: 0; padding: 0;">
<div style="width: 100%; height: 10%; display: inline-block; border: solid black 1px">
<center>
<div id="here" style="width: 50%; height: 100px; border-top-left-radius: 30%; border-bottom-right-radius: 30%; background-color: orange;">
</div>
</center>
</div>
<div style="width:80%; height:70%; margin-left: 10%; background: #FFFFB8; display: inline-block;">
</div>
<center>
<div style="width: 50%; height: 100px; border-top-left-radius: 30%; border-bottom-right-radius: 30%; background-color: orange;">
</div>
</center>
</body>
</html>
输出:
let param1 = [{a:1,b:'1',c:true},{a:'1',b:2,c:3,d:false},{a:1,c:'test'}];
let param2 = ['a', 'b', 'c'];
function test(objArr, keys) {
let returnObject = {};
keys.forEach(key => returnObject[key] = []);
return objArr.reduce((ret, obj) => {
keys.forEach(key => {
if (obj[key] !== undefined)
ret[key].push(obj[key]);
});
return ret;
}, returnObject);
}
console.log(JSON.stringify(test(param1, param2)));
答案 3 :(得分:0)
我在下面编码,请看看这个解决方案。
function test(arr, arr1) {
return arr.reduce((total, current) => {
arr1.forEach(curr => {
if (typeof total[curr] === "undefined") total[curr] = [];
if (current[curr]) total[curr].push(current[curr]);
});
return total;
}, {});
}
console.log(
test(
[
{ a: 1, b: "1", c: true },
{ a: "1", b: 2, c: 3, d: false },
{ a: 1, c: "test" }
],
["a", "b", "c"]
)
);
&#13;