将数组推入JavaScript对象

时间:2019-11-14 23:07:58

标签: javascript

x是一个对象

let x = {a: [0], b: [1], c: [2], d: [3]}

y是一个数组

let y = [4, 5, 6, 7]

y推入x以使x成为正确的方法是什么

x = {a: [0, 4], b: [1, 5], c: [2, 6], d: [3, 7]}

我已经使用for循环完成了,但是也许有更好的方法。

5 个答案:

答案 0 :(得分:4)

定义与另一个数组的关联顺序:

let order = ["a","b","c","d"];
let x = {a: [0], b: [1], c: [2], d: [3]};
let y = [4, 5, 6, 7, 8];
y.forEach((n,i) => {
  let key = order[i % order.length];
  x[key].push(n);
});

答案 1 :(得分:2)

您可以使用此方法完成相同的操作:

Object.entries(x).reduce((acc, [key, arr], index) => {
  acc[key] = [...arr, y[index]]
  return acc
}, {})

这就是说,正如上面的评论中提到的那样,不能保证键顺序,因此您可能会在某些浏览器或某些条件下遇到意外行为。

答案 2 :(得分:1)

如果您的订单得到保证,并且x和y中项目的长度匹配,那么这样的琐碎事情就会出现:

let x = {
  a: [0],
  b: [1],
  c: [2],
  d: [3]
};

let y = [4, 5, 6, 7];

let i = 0;
for (let key in x) {
  x[key].push(y[i++]);
}

console.info(x);

答案 3 :(得分:0)

我不知道完整的上下文,但我想您可以使用类似这样的内容:

Object.keys(x).reduce((acc, key, index) => ({...acc, [key]: [...x[key], y[index]]}), {})

答案 4 :(得分:-2)

我认为不可能使用JS对象(如注释中所述),因为不能保证键顺序。另外,这里有一个精美的地图对象,它确实可以满足您的需求:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Objects_and_maps_compared

它可以作为数组进行迭代,因此保留了密钥插入顺序。这是一个可行的示例。

https://repl.it/repls/HandyPuzzlingDeal