【问题标题】:how to split an array at a certain point in javascript? [duplicate]如何在javascript中的某个点拆分数组? [复制]
【发布时间】:2014-11-10 23:31:21
【问题描述】:

假设你有这个:

["10:00 PM", "10:15 PM", "10:30 PM", "10:45 PM", "11:00 PM"]

我想在"10:30 PM" 拆分或分解这个数组并获取剩余的数组:

["10:45 PM", "11:00 PM"]

有什么想法吗?

我可以遍历它,然后匹配每个结果,然后构建另一个数组,我在想是否有“内置”方式。

【问题讨论】:

  • 我想这并不完全是重复的,因为问题是删除元素直到并包括一个具有特定值的元素,而不是从一开始就删除一个或一些固定数量的元素。跨度>
  • 这个问题询问如何删除前两个元素,受骗者询问删除一个元素,并展示了多种方法,如果他准备好考虑一下,可以帮助 OP。
  • 如果他准备好稍微思考一下,他一开始就不会发布这个问题。无论如何,问题询问如何删除前两个元素,它询问如何删除直到并包括值为“10:30 PM”的元素。
  • 实际上,它确实询问如何删除前两个元素;-) 正如 OP 自己所说,他知道如何遍历数组以找到匹配的元素。他正在寻找正确的内置方法来从数组的开头删除元素。

标签: javascript arrays split


【解决方案1】:
var times = ["10:00 PM", "10:15 PM", "10:30 PM", "10:45 PM", "11:00 PM"];

// without altering the array
var newTimes = times.slice(times.indexOf("10:30 PM") + 1);

// or, altering the array
times.splice(times.indexOf("10:30 PM") + 1);

【讨论】:

    【解决方案2】:

    @sahbeewah 的解决方案很好,另一种(破坏性的)可能性是

    while (array.pop() !== '10:30 PM") { }
    

    虽然您还需要处理不愉快的情况。

    我们可以使用Array#reduceString#split 编写一个广义的类比,如下所示:

    function split_array(arr, delim) {
        return arr.reduce(function(result, elt) {
            if (delim === elt) {
                result.push([]);
            } else {
                result[result.length-1].push(elt);
            }
            return result;
        }, [[]]);
     }
    

    然后

    split_array(times, "10:30 PM") // [["10:00 PM", "10:15 PM"], ["10:45 PM", "11:00 PM"]]
    

    所以我们的结果是split_array(times, "10:30 PM")[1]

    一个明显的扩展是传递一个函数来代替delim 来指定更通用的“分隔符”。

    【讨论】:

      【解决方案3】:

      您可以使用.splice() 来执行此操作.. 喜欢

      var array = ["10:00 PM", "10:15 PM", "10:30 PM", "10:45 PM", "11:00 PM"];
      var index = array.indexOf('10:30 PM');
      var part2 = array.splice(index + 1);
      
      console.log(array, part2)

      【讨论】:

        猜你喜欢
        • 2017-09-16
        • 2016-03-12
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        相关资源
        最近更新 更多