如何将对象插入到对象列表的开头,当它具有unshift时不是函数错误?

时间:2016-04-28 17:10:52

标签: javascript

如何在作为对象列表的对象中插入对象元素?

我在ReactJS中有一小段代码:

var allMessages = this.state.data;
var newMessages = allMessages.unshift([data]); // i suppose it should be unshift if it was an array, but it is an object o_O
this.setState({ data: newMessages });

其中: (chrome控制台输出)

> data
Object {id: "12", text: "1234124", date: "2016-04-28 20:00:07", sender: "user", type: "receiver"}
> allMessages
[Array[1], Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
> typeof allMessages
"object"

如何将data插入allMessages的开头?

我看过这个回复How can I add new array elements at the beginning of an array in JavaScript?,这是另一种情况,因为我的allMessages变量是object而不是数组。

当我尝试使用unshift is not a function

时,我得到unshift

3 个答案:

答案 0 :(得分:1)

我可以想到这项工作;

var tempMessage= {};
tempMessage.data = data;
for(var key in allMessages){
     tempMessage[key] = allMessages[key];
}

不仅仅是将其设置回来

allMessages = tempMessage;

答案 1 :(得分:1)

尝试

var arr = Array.prototype.slice.call(allMessages);
arr.unshift(data);

您可以看到how does Array.prototype.slice.call() work?

答案 2 :(得分:0)

生意不好,但对我而言,做到了以下几点:

this.setState({data: this.state.data.reverse().concat(data).reverse()});

所以基本上改变顺序,将其放在最后,然后再次改变顺序,这很丑,我知道,但是确实可以。