在数组长度更改的js中迭代数组

时间:2017-04-11 18:43:20

标签: javascript arrays ecmascript-6

我认为这是一项简单的任务,但不幸的是,如果没有太多的话,我就无法做到。

我有以下数据结构。我有一个很大的时期"从1开始到30结束。每个对象代表"好"从object.start开始并在object.ends结束的句点。 "差"期间介于" good"可以在1和第一个时期之间,最后一个时期和30个之间。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<form name="quote" id="price-quote">
  <div class="container">
    <div id="service-tabs" class="container">
      <ul class="nav nav-pills">
        <li class="active"><a href="#carpet-cleaning" data-toggle="tab">Carpet Cleaning</a></li>
        <li><a href="#upholstery-cleaning" data-toggle="tab">Upholstery Cleaning</a></li>
      </ul>

      <div class="tab-content clearfix">
        <div class="tab-pane active" id="carpet-cleaning">
          <h3>Carpet Cleaning Options</h3>
          <!--how many bedrooms-->
          <label class="control-label" for="carpet_cleaning">Bedrooms</label>
          <br>
          <select class="form-control-1" id="carpet_cleaning">
            <option value="0">0</option>
            <option value="1">1</option>
            <option value="2">2</option>
          </select>
        </div>

        <div class="tab-pane" id="upholstery-cleaning">
          <h3>Upholstery Cleaning Options</h3>
          <!--how many dining room chairs-->
          <label class="control-label" for="dining_chairs_cleaning">Dining Room Chairs (each)</label>
          <br>
          <select class="form-control-1" id="dining_chairs_cleaning">
            <option value="0">0</option>
            <option value="1">1</option>
            <option value="2">2</option>
          </select>
        </div>
      </div>
    </div>
  </div>
</form>

我想得到新的&#34;坏&#34;和#34;好&#34;期间长度。每个数组项代表句点的长度(坏或好的)

const data = [
  {start: 2, end: 4},
  {start: 10, end: 15},
  {start: 17, end 27}
]

的结果
array = [1, 3, 5, 6, 1, 11, 3]

当我检查第一个object.start是否为0并且最后一个object.end是否为30时,我的主要if?#ology开始。如何避免呢?

1 个答案:

答案 0 :(得分:1)

您可以检查第一个起始值是否小于所需的间隔开始时间,并将坏时间段的长度插入结果数组中,然后添加良好时段结果数组的长度。用末尾调整最后一个,然后继续。

最后取剩下的所需间隔并将长度推到结果数组。

                                                 miss.   given
data                       missing     given    length  length
------------------------- ---------  ---------  ------  ------
const data = [             
  {start: 2 , end:  4},     1 -  1     2 -  4      1       3
  {start: 10, end: 15},     5 -  9    10 - 15      5       6
  {start: 17, end: 27}     16 - 16    17 - 27      1      11
]                          28 - 30                 3

&#13;
&#13;
var data = [{ start: 2, end: 4 }, { start: 10, end: 15 }, { start: 17, end: 27 }],
    last = 1,
    end = 30,
    result = [];

data.forEach(function (o) {
    if (last < o.start) {
        result.push(o.start - last);
    }
    result.push(o.end - o.start + 1);
    last = o.end + 1;
});

if (last < end) {
    result.push(end - last + 1);
}

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;