Javascript 将数组合并到单个数组中

Javascript 将数组合并到单个数组中,javascript,arrays,Javascript,Arrays,如果这是.NET,我会问如何转换List这将有点复杂,因为数组js_数据集中的项不是数组,而是更通用的对象。这意味着,如果您试图读取这些键,就不能假定它们是有序的 让我们编写一些帮助函数来解释这一点 function dataItemCollectionToArray(o) { var keys = Object.keys(o); // assuming no non-DataItem keys, so next line commented out // keys =

如果这是.NET,我会问如何转换
List这将有点复杂,因为数组
js_数据集中的项不是数组,而是更通用的对象。这意味着,如果您试图读取这些键,就不能假定它们是有序的

让我们编写一些帮助函数来解释这一点

function dataItemCollectionToArray(o) {
    var keys = Object.keys(o);
    // assuming no non-DataItem keys, so next line commented out
    // keys = keys.filter(function (e) {return e.indexOf("DataItem") === 0;});
    keys.sort(function (a, b) { // ensure you will get the desired order
        return +a.slice(8) - +b.slice(8);
    });
    return keys.map(function (e) {return o[e];});
}
现在,您可以循环使用
js_数据集
执行此转换

var myDataSet = [], i;
for (i = 0; i < js_datasets.length; ++i) {
    // assuming no gaps, if you need to add gaps, also find min, max indices
    // in `dataItemCollectionToArray`, and check them in each iteration here
    myDataSet.push.apply(myDataSet, dataItemCollectionToArray(js_datasets[i]));
}
var myDataSet=[],i;
对于(i=0;i


请注意,如果您希望支持旧的浏览器,则可能需要重新填充,即IE
concat
不会修改任何内容,但会返回一个新数组@Bergi从问题中的图片上看,数组中的项目看起来不像是真正的数组(这意味着平坦问题中的答案在这里实际上不起作用)@PaulS。你可能是对的(Dave,请澄清一下,以JSON的形式发布你的输入,我会重新打开),但这意味着
concat
等无论如何都无法工作,我们需要某种自定义的迭代机制。我根本不会对键排序,根据定义,它们是无序的,所以它们也可以保持这种状态—只需扩展一个对象和所有键即可。排序时,您需要使用自定义比较函数来避免<代码> DATAITEM100R/COD>在代码> > DATAITEM999 /代码> @贝尔吉之前排序,谢谢,我没有考虑排序问题。
function dataItemCollectionToArray(o) {
    var keys = Object.keys(o);
    // assuming no non-DataItem keys, so next line commented out
    // keys = keys.filter(function (e) {return e.indexOf("DataItem") === 0;});
    keys.sort(function (a, b) { // ensure you will get the desired order
        return +a.slice(8) - +b.slice(8);
    });
    return keys.map(function (e) {return o[e];});
}
var myDataSet = [], i;
for (i = 0; i < js_datasets.length; ++i) {
    // assuming no gaps, if you need to add gaps, also find min, max indices
    // in `dataItemCollectionToArray`, and check them in each iteration here
    myDataSet.push.apply(myDataSet, dataItemCollectionToArray(js_datasets[i]));
}