我有以下输入
const testObj = [
{id:1, name: 'name1',role:'Developer'},
{id:2, name: 'name2',role:'Lead'},
{id:3, name: 'name3',role:'QA'}
]
并且我需要获得以下格式的输出
{
Developer: {id:1,name:'name1',role:'Developer'},
Lead: {id:2,name:'name2',role:'Lead'},
QA: {id:3,name:'name3',role:'QA'}
}
我试着写了下面的代码,但是没有得到我想要的输出
const convert = (array,role) => {
var result = {}
for(let index = 0; index < array.length; index++){
result[array[index].id] = array[index].name;
}
return result;
}
我使用下面的代码调用我的方法
convert(testObj,'role');
如何修改此方法以在不使用Reduce关键字和all的情况下获得所需的输出
发布于 2018-06-30 20:14:15
您离得不远(如果我假设输出中的role
应该类似于输入中的role
),但是for
的主体应该是
result[array[index].role] = array[index];
您使用的是id
而不是role
,并且获取的是name
而不是整个对象。
还请注意,您不需要在所显示的代码中使用第二个参数(role
),也不需要从原始结构转到新结构:
const testObj = [{id:1, name: 'name1',role:'Developer'},
{id:2, name: 'name2',role:'Lead'},
{id:3, name: 'name3',role:'QA'}]
const convert = (array) => {
var result = {}
for (let index = 0; index < array.length; index++) {
result[array[index].role] = array[index];
}
return result
}
console.log(convert(testObj));
.as-console-wrapper {
max-height: 100% !important;
}
不过,我们可以使用for-of
将其简化一点:
const testObj = [{id:1, name: 'name1',role:'Developer'},
{id:2, name: 'name2',role:'Lead'},
{id:3, name: 'name3',role:'QA'}];
const convert = (array) => {
const result = {};
for (const entry of array) {
result[entry.role] = entry;
}
return result;
}
console.log(convert(testObj));
.as-console-wrapper {
max-height: 100% !important;
}
请注意,as Jonas W. points out,您的结果结构仅允许每个角色中只有一个人。您可能希望改为使用对象存储数组:
const testObj = [{id:1, name: 'name1',role:'Developer'},
{id:2, name: 'name2',role:'Lead'},
{id:3, name: 'name3',role:'QA'},
{id:4, name: 'name4',role:'QA'}]
const convert = (array) => {
var result = {}
for (let index = 0; index < array.length; index++) {
var roleArray = result[array[index].role];
if (!roleArray) {
roleArray = result[array[index].role] = [];
}
roleArray.push(array[index]);
}
return result
}
console.log(convert(testObj));
.as-console-wrapper {
max-height: 100% !important;
}
或者,再次使用for-of
const testObj = [{id:1, name: 'name1',role:'Developer'},
{id:2, name: 'name2',role:'Lead'},
{id:3, name: 'name3',role:'QA'},
{id:4, name: 'name4',role:'QA'}];
const convert = (array) => {
const result = {}
for (const entry of array) {
let roleArray = result[entry.role];
if (!roleArray) {
roleArray = result[entry.role] = [];
}
roleArray.push(entry);
}
return result;
}
console.log(convert(testObj));
.as-console-wrapper {
max-height: 100% !important;
}
发布于 2018-06-30 20:15:08
您的代码通过.id
对.name
进行分组,您希望根据对象的角色对对象本身进行分组:
function group(array, key) {
const result = {};
for(const obj of array)
result[ obj[key] ] = obj;
return result;
}
group(testObj, "role")
发布于 2018-06-30 20:23:09
const testObj = [{id:1, name: 'name1',role:'Developer'},
{id:2, name: 'name2',role:'Lead'},
{id:3, name: 'name3',role:'QA'}];
const convert = (array, role) => {
let i = 0;
const output = {};
for (; i < array.length; i+= 1) {
output[array[i][role]] = array[i];
}
return output;
}
console.log(convert(testObj, 'role'));
https://stackoverflow.com/questions/51114795
复制相似问题