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);