如何解决从箭头功能将对象推入数组
异步/等待功能search
返回类似于以下内容的对象:
[
{
"title":"page title","url":"/page/url/index.html","content":"blah blah blah"
},...
]
我需要将每个对象从val
推入数组,但是当我使用时推入:
results = [];
search(input).then(val=> results.push(val));
我得到一个类似于(我希望对象条目在数组中位于顶层)的嵌套数组:
[
[
{title:"...",url:"...",content:"..."},{title:"...",]
]
所以我尝试用箭头for
将对象中的每个条目推入数组,但这似乎不起作用。
results = [];
search(input).then(val=> for(i in val) {results.push(val[i])});
解决方法
使用.push()
代替.concat()
results = [];
search(input).then(val=> { results = results.concat(val) });
,
使用spread syntax ...
也不需要For loop
。
search(input).then(val=> results = [...results,...val]);
或按照@Patrick_Hund的建议
search(input).then(val=> results.push(...val));
这里的问题是您正在将数组推入数组。
您需要推送数组的元素。
扩展语法应该可以解决该问题。
希望您现在已经很清楚了。
,如果您有一个数组并调用了一个将返回Promise<array>
的函数,则无需对结果执行任何迭代。 Concat 启用数组:
async function getNewData() {
return Promise.resolve([{
d: 1
},{
e: 3
}]);
}
let results = [{
a: 3
},{
b: 4
}];
getNewData().then(newdata => {
results = results.concat(newdata);
// same as results = [...results,...newdata];
console.log(results);
});
另一方面,您也可以推使用点差运算符
async function getNewData() {
return Promise.resolve([{
d: 1
},{
e: 3
}]);
}
const results = [{
a: 3
},{
b: 4
}];
getNewData().then(newdata => {
results.push(...newdata);
// same as results.push(newdata[0],newdata[1],etc)
console.log(results);
});
这种方法可能会令人困惑,因为人们倾向于忽略 Array.prototype.push 的可变性,但是它避免了重新声明results
,因此您可以将目标数组声明为 const 。
如果要使用for循环,则必须这样做
for(var i=0; i < val.length; i++) {
results.push(val[i])
}
有更多简洁的方法(请参见Patrick Hund的评论),但这就是使用for循环的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。