将多个对象数组合并为一个并在函数外部使用 [英] Concatenate multiple array of objects into one and use outside of function
问题描述
我想将多个数组连接成一个.我的结果是给出多个对象数组.我想将所有这些推入单个数组中.它们都是5的数组.我想将每个对象数组推入1个巨型数组.有可能吗?
I want to concatenate multiple array's into one. My result here is giving multiple array of objects. I want to push all them into a single array. All of them are array's of 5. I want to push each of the array of objects into 1 giant array. Is that possible?
let data = [{"site_nm": "gs Universe", "date": "2019-10-01", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "gs Gameplay", "date": "2019-10-01", "sigh": 4, "yo": 3, "wokay": 2}, {"site_nm": "gs Universe Trailers", "date": "2019-10-01", "sigh": 5, "yo": 5, "wokay": 0}, {"site_nm": "TR", "date": "2019-10-01", "sigh": 4, "yo": 4, "wokay": 0}, {"site_nm": "gs", "date": "2019-10-01", "sigh": 5, "yo": 5, "wokay": 2}, {"site_nm": "GB", "date": "2019-10-01", "sigh": 1, "yo": 1, "wokay": 1}, {"site_nm": "cn", "date": "2019-10-01", "sigh": 4, "yo": 4, "wokay": 1}, {"site_nm": "Roadshow", "date": "2019-10-01", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "TV", "date": "2019-10-01", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "ZD", "date": "2019-10-01", "sigh": 2, "yo": 2, "wokay": 0}, {"site_nm": "Carfection", "date": "2019-10-01", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "gs Trailers", "date": "2019-10-01", "sigh": 3, "yo": 3, "wokay": 0}, {"site_nm": "gs News", "date": "2019-10-01", "sigh": 3, "yo": 3, "wokay": 0}, {"site_nm": "gs Mobile", "date": "2019-10-01", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "gs Universe Trailers", "date": "2019-10-02", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "gs Gameplay", "date": "2019-10-04", "sigh": 6, "yo": 6, "wokay": 2}, {"site_nm": "Roadshow", "date": "2019-10-02", "sigh": 2, "yo": 2, "wokay": 0}, {"site_nm": "gs", "date": "2019-10-02", "sigh": 3, "yo": 3, "wokay": 2}, {"site_nm": "TR", "date": "2019-10-02", "sigh": 4, "yo": 3, "wokay": 0}, {"site_nm": "cn Highlights", "date": "2019-10-03", "sigh": 8, "yo": 8, "wokay": 0}, {"site_nm": "gs Universe", "date": "2019-10-02", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "cn en Espa\u00f1ol", "date": "2019-10-02", "sigh": 6, "yo": 6, "wokay": 0}, {"site_nm": "gs Trailers", "date": "2019-10-02", "sigh": 2, "yo": 2, "wokay": 0}, {"site_nm": "ZD", "date": "2019-10-02", "sigh": 4, "yo": 4, "wokay": 1}, {"site_nm": "cn", "date": "2019-10-05", "sigh": 5, "yo": 5, "wokay": 1}, {"site_nm": "TV", "date": "2019-10-02", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "CH", "date": "2019-10-02", "sigh": 1, "yo": 1, "wokay": 0}, {"site_nm": "GB", "date": "2019-10-02", "sigh": 3, "yo": 3, "wokay": 3}, {"site_nm": "DLNow", "date": "2019-10-02", "sigh": 1, "yo": 0, "wokay": 0}, {"site_nm": "gs News", "date": "2019-10-02", "sigh": 2, "yo": 2, "wokay": 0}]
let sites = [...new Set(data.map(({
site_nm
}) => site_nm))].sort();
let dates = [...new Set(data.map(({
date
}) => date))].sort();
sites.forEach(myFunction);
function myFunction(item) {
var foo = data.filter(function(e) {
return e.site_nm == item;
});
let foo_dates = [...new Set(foo.map(({
date
}) => date))].sort();
for (
var date = moment(dates[0], "YYYY-MM-DD"); date <= moment(dates[dates.length - 1], "YYYY-MM-DD"); date = date.add(1, 'days')) {
var dateFormatted = date.format("YYYY-MM-DD");
if (!foo_dates.includes(dateFormatted)) {
foo.push({
"site_nm": item,
"date": dateFormatted,
"sigh": "",
"yo": "",
"wokay": ""
});
}
}
console.log(foo);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
我尝试了
result = [].concat(...foo);
console.log(result);
但是这也不起作用.我想在函数外使用这个巨型数组.
But this didnt work either. I want to use this giant array outside the function.
这是我的输出结果:
我希望我的数组成为所有这些数组的一个
I want my array to be all these array's in one
推荐答案
sites.forEach
应该为sites.map
,因为当它们都遍历数组中的元素时,只有Array.prototype.map
返回一个新的修改后的数组.仅当您要使用此修改后的数组时.而且您需要从myFunction
返回foo,类似
sites.forEach
should be sites.map
, since while they both iterate over the elements in the array, only Array.prototype.map
returns a new modified array. That's only if you want to use this modified array. And you would need to return foo from myFunction
with something like
console.log(foo);
return foo;
然后,使用Array.prototype.reduce
使其成为一个巨大的数组.在下面添加sites.foreach
(现在为sites.map
)
Then, use Array.prototype.reduce
to make it a huge array. Add below sites.foreach
(now sites.map
)
// makes [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// become [1, 2, 3, 4, 5, 6, 7, 8, 9]
sites.reduce((finalarray, array) => finalarray.concat(array))
这只是将所有对象加在一起. finalarray
只是最终结果,而array是当前元素. reduce方法仍然会遍历所有元素.
Which just adds all the objects together. finalarray
is just the final result, while array is the current element. The reduce method still iterates over all elements.
或者,您可以使用sites.flat
(取自 @Addis )并将其分配给自身或新变量
Or you could use sites.flat
(taken from @Addis) and assign it to itself or a new variable
// Assigns to itself
sites = sites.map(myFunction).flat()
// Assigns to a new variable
let formattedSites = sites.map(myFunction).flat()
这篇关于将多个对象数组合并为一个并在函数外部使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!