所以,在我上次的采访中,我有一个非常微小但很难完成的任务。我只是想知道如何解决它。我认为我们需要在这个任务中实现递归,但我不清楚它。
任务:
let arr = [{name: 'width', value: 300}, {name: 'height', value: 100}];
在输出时我们必须:
let obj = {width:300, height: 100};
数组对象的数量可以是无穷大。
P.S。 如果您向我提供有关如何完成此任务的知识的链接,我将感到高兴。
谢谢。
答案 0 :(得分:5)
使用函数reduce
Array.prototype.reduce
循环一个数组,为每个对象应用一个处理程序。a
将包含每次迭代的结果。converter
接收累加器和当前对象。Object.assign(a, {[name]: value})
为当前累加器分配一个新属性。{[name]: value}
该代码将构建一个对象,如下所示:{ width: 300 }
let arr = [{name: 'width', value: 300},{name: 'height', value: 100}],
converter = (a, {name, value}) => (Object.assign(a, {[name]: value})),
obj = arr.reduce(converter, {});
console.log(obj);

.as-console-wrapper { max-height: 100% !important; top: 0; }

<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
&#13;
答案 1 :(得分:3)
数组.reduce
方法非常合适。从空对象开始,对于每个数组项,使用该键和值向对象添加条目。例如:
let arr = [{name: 'width', value: 300}, {name: 'height', value: 100}];
let result = arr.reduce((combo, item) => {
combo[item.name] = item.value;
return combo;
}, {});
console.log(result);
答案 2 :(得分:1)
首先,你在数组中的两个对象之间缺少一个逗号:)
每当您想要处理数组并提出单个值时,您都希望使用array.reduce。您可以选择方向(reduce或reduceRight)和累加器函数,以生成所需的值(或对象)。
答案 3 :(得分:1)
使用reduce,destructurization和object spread operator的另一种方法:
const src = [{
name: 'width',
value: 300
}, {
name: 'height',
value: 100
}]
const reducer = (acc, { name, value }) => ({
...acc,
...{ [name]: value }
});
const out = src.reduce(reducer, {});
console.log(out);
&#13;
答案 4 :(得分:0)
您可以通过在括号表示法的帮助下在数组中添加键值对来创建对象:
let arr = [{name: 'width', value: 300},{name: 'height', value: 100}];
let obj = {};
arr.forEach(pair => obj[pair.name] = pair.value)
console.log(obj);
&#13;
答案 5 :(得分:0)
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);
答案 6 :(得分:0)
您也可以使用forEach()来解决它。
let arr = [{name: 'width', value: 300},{name: 'height', value: 100}];
let obj = {};
arr.forEach(val=>obj[val.name]=val.value);
答案 7 :(得分:0)
您可以使用Array.map()
以{ [name]: value }
的形式创建对象数组,并通过spreading将它们合并到一个对象Object.assign()
:
const arr = [{name: 'width', value: 300}, {name: 'height', value: 100}];
const object = Object.assign(...arr.map(({ name, value }) => ({ [name]: value })));
console.log(object);
&#13;
答案 8 :(得分:-1)
你可以用for循环来解决这个问题:
var obj = {};
for (var i=0; i<arr.length; i++){
obj[arr[i].name] = arr[i].value;
}