【问题标题】:Convert a two array object into a one array object将二数组对象转换为一数组对象
【发布时间】:2018-11-24 13:20:01
【问题描述】:

我有一个具有以下值的对象:

"Obj": {
    "value1": [],
    "value2": [
        "1",
        "2",
        "3",
        "4"
    ]
}

如果我检查我的 obj,我可以看到它的大小等于 2。当然,这是有道理的,因为我这里有两个数组。但问题是,我需要它只有一个数组。我的意思是:我想将这 2 个数组转换为一个数组。

已经尝试了一些方法。他们都没有预期的行为。

例如:

var arr = [];
arr = [sRows.value1, sRows.value2]

或者:

$.each(sRows, function(k,v){
    result[i] = v;
})

有什么想法吗?

【问题讨论】:

  • 不确定你想如何组合你的数组(你没有说),但我的玻璃球告诉我 Array.prototype.concat 可能是你正在寻找的东西。
  • 总是只有 2 个值吗?这些值总是数组吗?您希望转换如何(value1 后跟 value2,反之亦然,没有重复......)?
  • 总是两个数组,不是特定的顺序。是的,没有重复。
  • 在上面的示例中,您期望的 Obj 大小的正确值是多少? 5?还是 4 个?

标签: javascript arrays object each


【解决方案1】:

Array.prototype.concat() 怎么样?

let new_array = sRows.value1.concat(sRows.value2);

concat() 方法用于合并两个或多个数组。这种方法 不会改变现有数组,而是返回一个新数组。

【讨论】:

  • Can't use concat '因为第一个数组的值是一个空对象。
  • 没关系:repl.it/@calebjay/BlueNeatQuark你能澄清一下你的意思吗?
  • 当然。当我这样做时,结果值为:(4)[“1”,“2”,“3”,“4”]。所以它创建了 4 个不同的元素,每个值都是“value1”并忽略“value2”。没有按预期工作。
  • 在您的示例中, value1 是一个空数组。空数组没有可复制的内容,因此没有任何内容被复制。这与您的预期有何不同? (我假设在您的评论中您的意思是 value1 时不小心写了 value2)
  • 是的,对不起。我正是这个意思。实际问题是我首先指出的:“它返回的 array.length 为“4”。
【解决方案2】:

此函数会将您的对象转换为单个数组:

function convertArraysToArray(obj) {
    var output = [];
    for (var key in obj) {
        if (Array.isArray(obj[key])) {
            for (var index = 0; index < obj[key].length; index++) {
                output.push(obj[key][index]);
            }
        } else {
            output.push(obj[key]);
        }
    }
    return output;
}

如果您打算将其作为对象的单个元素,您也可以轻松实现。

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 2020-11-10
    • 2015-10-22
    • 2021-05-03
    • 2018-12-04
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多