K.J*_*J.K 4 javascript arrays object
这个以前的问题是最接近我很好奇的。我尝试了 indexOf() 和 filter() 的几种变体但没有成功
我有一个对象数组 ( exampleDat):
[{id:1, value:"100", name:"dog", D1: 10, D2: 67, D3: 33},
{id:2, value:"200", name:"cat", D1: 66, D2: 41, D3: 34},
{id:3, value:"300", name:"fish", D1: 23, D2: 45, D3:},
{id:4, value:"400", name:"mouse", D1: 13, D2: 55, D3:},
{id:5, value:"500", name:"snake", D1: 7, D2: 9, D3:}]
Run Code Online (Sandbox Code Playgroud)
在另一个函数中,我返回一个数组,其中包含我需要的这些“键”中的哪一个。这个数组是动态变化的,所以不可能把它们全部输入出来。例如,以下任何一个例子都是可行的,
useThese1 = ['D1','D2'] //Want exampleDat returned with only these key,value 'columns' returned
useThese2 = ['id','D1','D2','D3'] //Want exampleDat return with only these key,value 'columns' returned
useThese3 = ['value','D2','D3'] //Want exampleDat returned with only these key,value 'columns' returned
Run Code Online (Sandbox Code Playgroud)
所以我需要将useThese数组中的值动态映射到exampleDat数组
如果我知道确切的列,我可以手动输入它:
exampleDat.map(d => {return {D1: d.D1, D2: d.D2}})
Run Code Online (Sandbox Code Playgroud)
但我需要类似的东西:
dat.map(d => useThese1.map(g => {return {something?}}) ???
Run Code Online (Sandbox Code Playgroud)
在 R 中,它会简单而轻松地 exampleDat[,colnames(exampleDat) %in% useThese1]
您可以映射新键。
const
mapWith = (array, keys) => array.map(o => Object.fromEntries(keys.map(k => [k, o[k]]))),
data = [{ id: 1, value: "100", name: "dog", D1: 10, D2: 67, D3: 33 }, { id: 2, value: "200", name: "cat", D1: 66, D2: 41, D3: 34 }, { id: 3, value: "300", name: "fish", D1: 23, D2: 45, D3:97}, { id: 4, value: "400", name: "mouse", D1: 13, D2: 55, D3:98}, { id: 5, value: "500", name: "snake", D1: 7, D2: 9, D3:99}],
result1 = mapWith(data, ['D1', 'D2']),
result2 = mapWith(data, ['id', 'D1', 'D2', 'D3']),
result3 = mapWith(data, ['value', 'D2', 'D3']);
console.log(result1);
console.log(result2);
console.log(result3);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
Object.fromEntries 相对较新,但很容易polyfill。