为了我的生命,我想不出这点。
我需要一个二维数组,并在另一个数组中创建一个具有指定键名的对象数组。我该怎么做呢?
我正在尝试返回这样一个对象:
需要的结果:
[
{
map: 'map-1',
user: 'user-1',
type: 'type-1',
name: 'name-1',
street: 'street-1' ,
city: 'city-1'
},
{
map: 'map-2',
user: 'user-2',
type: 'type-2',
name: 'name-2',
street: 'street-2' ,
city: 'city-2'
}
...
]当前代码:
var collection = [
['map-1', 'map-2', 'map-3', 'map-4', 'map-5', 'map-6'],
['user-1', 'user-2', 'user-3', 'user-4', 'user-5', 'user-6'],
['type-1', 'type-2', 'type-3', 'type-4', 'type-5', 'type-6'],
['name-1', 'name-2', 'name-3', 'name-4', 'name-5', 'name-6'],
['street-1', 'street-2', 'street-3', 'street-4', 'street-5', 'street-6'],
['city-1', 'city-2', 'city-3', 'city-4', 'city-5', 'city-6']
];
var keys = [
"map", "user", 'type', "name", "street", 'city'
]
const arrayColumn = (arr, n) => arr.map((x, i) => {
return {[keys[i]]:x[n]}
});
let x = keys.map((x, i)=>{
return arrayColumn(collection, i)
})
console.log(x)发布于 2020-04-23 07:36:20
使用_.unzip()将集合转置到行,然后映射转置集合,并通过_.zipObject()将每一行与键组合。
const collection = [['map-1', 'map-2', 'map-3', 'map-4', 'map-5', 'map-6'], ['user-1', 'user-2', 'user-3', 'user-4', 'user-5', 'user-6'], ['type-1', 'type-2', 'type-3', 'type-4', 'type-5', 'type-6'], ['name-1', 'name-2', 'name-3', 'name-4', 'name-5', 'name-6'], ['street-1', 'street-2', 'street-3', 'street-4', 'street-5', 'street-6'], ['city-1', 'city-2', 'city-3', 'city-4', 'city-5', 'city-6']];
const keys = ["map", "user", 'type', "name", "street", "city"];
const result = _.unzip(collection).map(o => _.zipObject(keys, o));
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
与Lodash/fp一样,使用_.flow()生成一个函数,使用_.unzip()转换集合,并使用_.zipObject()映射将每一行转换为一个对象:
const fn = keys => _.flow(
_.unzip,
_.map(_.zipObject(keys)),
)
const collection = [['map-1', 'map-2', 'map-3', 'map-4', 'map-5', 'map-6'], ['user-1', 'user-2', 'user-3', 'user-4', 'user-5', 'user-6'], ['type-1', 'type-2', 'type-3', 'type-4', 'type-5', 'type-6'], ['name-1', 'name-2', 'name-3', 'name-4', 'name-5', 'name-6'], ['street-1', 'street-2', 'street-3', 'street-4', 'street-5', 'street-6'], ['city-1', 'city-2', 'city-3', 'city-4', 'city-5', 'city-6']];
const keys = ["map", "user", 'type', "name", "street", "city"];
const result = fn(keys)(collection);
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
发布于 2020-04-22 19:23:15
第一次检查时,减少功能从来就不容易理解。看看i & j,它们是在哪里创建的,它们是如何使用的。
var collection = [
['map-1', 'map-2', 'map-3', 'map-4', 'map-5', 'map-6'],
['user-1', 'user-2', 'user-3', 'user-4', 'user-5', 'user-6'],
['type-1', 'type-2', 'type-3', 'type-4', 'type-5', 'type-6'],
['name-1', 'name-2', 'name-3', 'name-4', 'name-5', 'name-6'],
['street-1', 'street-2', 'street-3', 'street-4', 'street-5', 'street-6'],
['city-1', 'city-2', 'city-3', 'city-4', 'city-5', 'city-6']
];
var keys = [
"map", "user", 'type', "name", "street", 'city'
];
// Iterate over lenght of objects in inner array(s)
var result = collection[0].map((_, j) => {
// For every key, save value in an object under its name with value from collection at position of key index and index of item being created
return keys.reduce((obj, key, i) => {
obj[key] = collection[i][j];
return obj;
}, {});
});
console.log(result);
发布于 2020-04-22 19:35:00
可以减少数组,并使用所需的属性构建新对象。
var collection = [['map-1', 'map-2', 'map-3', 'map-4', 'map-5', 'map-6'], ['user-1', 'user-2', 'user-3', 'user-4', 'user-5', 'user-6'], ['type-1', 'type-2', 'type-3', 'type-4', 'type-5', 'type-6'], ['name-1', 'name-2', 'name-3', 'name-4', 'name-5', 'name-6'], ['street-1', 'street-2', 'street-3', 'street-4', 'street-5', 'street-6'], ['city-1', 'city-2', 'city-3', 'city-4', 'city-5', 'city-6']],
keys = ["map", "user", 'type', "name", "street", 'city'],
result = collection.reduce((r, a, i) => {
a.forEach((v, j) => (r[j] = r[j] || {})[keys[i]] = v);
return r;
}, []);
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/61373213
复制相似问题