所以我有一个名为mergeItems的对象数组,其值等于您在下面看到的值
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0:
city: [Array(13)]
miles: [Array(13)]
phone: [Array(13)]
photos: [Array(13)]
prices: [Array(13)]
state: [Array(13)]
titles: [Array(13)]
urls: [Array(13)]
who: [Array(13)]
__proto__: Object
1: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
2: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
3: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
4: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
5: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
6: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
7:
city: [Array(0)]
miles: [Array(0)]
phone: [Array(0)]
photos: [Array(0)]
prices: [Array(0)]
state: [Array(0)]
titles: [Array(0)]
urls: [Array(0)]
who: [Array(0)]
__proto__: Object
length: 8
__proto__: Array(0)
它在数组内部有对象,然后每个对象内部都有相同的键。我正在尝试将所有7个数组合并在一起,然后再合并所有城市,英里等键及其内部的数组。
我尝试做
let newData = mergeItems.join();
setState({mainItems: newData});
但是因为那似乎只能合并数组,所以对我没有好处。想知道是否有人可以向我指出如何处理该问题的正确方向。非常感谢=]
我的mergeItems当前值是:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
1: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
2: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
3: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
4: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
5: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
6: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
7: {urls: Array(1), titles: Array(1), miles: Array(1), prices: Array(1), photos: Array(1), …}
length: 8
__proto__: Array(0)
我想要的输出看起来像这样
{urls: Array(7), titles: Array(7), miles: Array(7), prices: Array(7), photos: Array(7), …}
city: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
miles: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
phone: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
photos: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
prices: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
state: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
titles: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
urls: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
who: (7) [Array(120), Array(0), Array(18), Array(57), Array(1), Array(0), Array(13)]
__proto__: Object
答案 0 :(得分:2)
您似乎想要结束一个对象,该对象的值是数组的数组(而不是每个键的组合数组)。在这种情况下,您可以使用以下方法:
+----+----------+-------+-------+----------------+
| id | name | pname | skill | available_date |
+----+----------+-------+-------+----------------+
| 1 | john doe | hms | php | 2019-01-02 |
| 1 | john doe | hms | react | 2019-01-02 |
| 2 | jane doe | hms | java | 2020-01-16 |
| 2 | jane doe | IS | java | 2020-01-16 |
| 2 | jane doe | hms | js | 2020-01-16 |
| 2 | jane doe | IS | js | 2020-01-16 |
+----+----------+-------+-------+----------------+
答案 1 :(得分:2)
如果我理解正确,从根本上讲,您有:
const input = [{ foo: 1, bar: 2}, {foo: 3, bar: 4}]
并且您想要:
{ foo: [1, 3], bar: [2, 4] }
换句话说,您想获取事物数组(在这种情况下为对象),然后将其缩小降低为单个值(一个包含其他对象值数组的对象)。事实证明,Javascript有一种完全可以做到这一点的方法,出于某种原因,我使用了该特定动词...
const output = input.reduce((objectWithMergedProperties, currentObject) => {
objectWithMergedProperties.foo.push(currentObject.foo);
objectWithMergedProperties.bar.push(currentObject.bar);
return objectWithMergedProperties;
}, { foo: [], bar: [] });
之所以可行,是因为reduce
遍历数组,从objectWithMergedProperties
的初始{ foo: [], bar: [] }
开始,但是随后每次迭代将其更改为回调内部返回的值。
这使您可以将每个迭代对象的值添加到要构建的输出对象,然后从回调内部返回该对象。完成所有迭代后,该对象最终将从整个reduce
调用中返回。
当然,您的示例不是针对具有foo
和bar
属性的对象,但是希望这可以演示如何使用reduce
来减少任何将具有 any 值的数组放入单个对象。
当然,如果您有很多属性,则始终可以(通过对象的键)进行更多的迭代,而不必对它们进行硬编码:
objectWithMergedProperties.foo.push(currentObject.foo);
objectWithMergedProperties.bar.push(currentObject.bar);
可能会变成:
Object.keys(objectWithMergedProperties)
.forEach(key => objectWithMergedProperties[key].push(currentObject[key]);