Javascript 如何转换一个特定对象中的对象数组?

Javascript 如何转换一个特定对象中的对象数组?,javascript,arrays,recursion,Javascript,Arrays,Recursion,所以,我上次面试的任务很小,但对我来说很难。我只是讨论了如何解决这个问题。我认为我们需要在这个任务中实现递归,但我不清楚 任务: let arr = [{name: 'width', value: 300}, {name: 'height', value: 100}]; 关于产出,我们必须具备: let obj = {width:300, height: 100}; 数组对象的计数可以是无穷大 附言。 如果你能给我提供关于如何完成这项任务的知识链接,我会很高兴的 多谢各位 使用功能reduc

所以,我上次面试的任务很小,但对我来说很难。我只是讨论了如何解决这个问题。我认为我们需要在这个任务中实现递归,但我不清楚

任务:

let arr = [{name: 'width', value: 300}, {name: 'height', value: 100}];
关于产出,我们必须具备:

let obj = {width:300, height: 100};
数组对象的计数可以是无穷大

附言。 如果你能给我提供关于如何完成这项任务的知识链接,我会很高兴的


多谢各位

使用功能
reduce

简要说明
  • 函数
    Array.prototype.reduce
    循环一个数组,为每个对象应用一个处理程序
  • 累加器
    a
    将包含每次迭代的结果
  • 功能
    转换器
    接收累加器和当前对象
  • 这个
    Object.assign(a,{[name]:value})
    为当前累加器分配一个新属性
  • 计算属性名
    {[name]:value}
    该代码将按如下方式构建对象:
。作为控制台包装{最大高度:100%!重要;顶部:0;}

您可以在括号符号的帮助下,通过在数组中添加键值对来创建对象:

让arr=[{name:'width',value:300},{name:'height',value:100}];
设obj={};
arr.forEach(pair=>obj[pair.name]=pair.value)

控制台日志(obj)您只需使用for循环即可解决此问题:

var obj = {};
for (var i=0; i<arr.length; i++){
    obj[arr[i].name] = arr[i].value;
}
var obj={};

对于(var i=0;i首先,数组中的两个对象之间缺少一个逗号:)


每当您希望处理一个数组并得出一个值时,您都希望使用。您可以选择方向(reduce或reduceRight)和累加器函数,以生成所需的值(或对象)。

数组
。reduce
方法非常适合。从一个空对象开始,对于每个数组项,使用该键和值向对象添加一个条目。例如:

让arr=[{name:'width',value:300},{name:'height',value:100}];
让结果=arr.reduce((组合,项目)=>{
组合[item.name]=item.value;
返回组合;
}, {});

控制台日志(结果)使用reduce、destructurization和object spread操作符的另一种方法:

const src=[{
名称:“宽度”,
价值:300
}, {
名称:'高度',
数值:100
}]
const reducer=(acc,{name,value})=>({
…acc,
…{[name]:value}
});
const out=src.reduce(reducer,{});
控制台。注销
var len=arr.length,
var newA=[];
让宽度、高度、项目;
对于(var x=0;x
这应该适用于在最终数组中将宽度和高度分组在一起:)

如果您只想要一个大对象(确保没有重复的名称!)

var len=arr.length,
obj={};
对于(var x=0;x
您也可以使用forEach()来解决它

let arr = [{name: 'width', value: 300},{name: 'height', value: 100}];
let obj = {};
arr.forEach(val=>obj[val.name]=val.value);
您可以使用以
{[name]:value}
的形式创建对象数组,并通过以下方式将它们合并到单个对象中:

const arr=[{name:'width',value:300},{name:'height',value:100}];
const object=object.assign(…arr.map(({name,value})=>({[name]:value}));

console.log(对象)操作,我下面的答案将根据您对每个对象的期望,保持高度/宽度成对。如果你需要更多的帮助,请告诉我。你试过其他的答案了吗?代码很好,但这不意味着宽度和高度都是独立的吗?我相信OP希望宽度和高度成对,所以它是来自原始数组的两个对象的组合。所以原始数组长度应该是最终输出长度的两倍。我相信OPs期望的输出是原始数组中每对具有高度和宽度的一个对象。@Nerdi.org答案符合OP的要求。但这就是我得到的。。。OP有一个无限对象数组。预期结果是将成对的宽度/高度标注(来自原始阵列中的两个对象)组合在一个对象中。这些就是要求,就我所知,这里的大多数答案完全不考虑他希望值成对出现,而不是作为单个对象列出。如果我误解了你的代码是如何实现这一点的,我道歉-我只是想澄清一下,因为这里有很多答案根本不会导致OP想要的结果。但是如果我误解了,我道歉。OP从未真正说明他是否将高度/宽度配对,或者他是否希望每个可能的数组名称/值都位于单个对象中。@Nerdi.org但是,输入是一个数组。OP只想用该数组中的嵌套对象构建一个大对象。不过for()会更快。
var len = arr.length, 

var newA = []; 
let width, height, item; 
for(var x = 0; x < len; x+=2){ //add 2 for pair loop because width/height in diff array objects 
 item.width = arr[x].value;
 item.height = arr[x+1].value; 
 newA.push(item); 
 // newA = [{width:value, height:value}, {width:value, height:value}];
}
console.log(newA);
var len = arr.length, 
obj = {}; 
for(var x = 0; x < len; x++){ 
 obj[arr[x].name] = arr[x].value;
} 
console.log(obj);
let arr = [{name: 'width', value: 300},{name: 'height', value: 100}];
let obj = {};
arr.forEach(val=>obj[val.name]=val.value);