【问题标题】:Array.splice is not returning the correct outputArray.splice 没有返回正确的输出
【发布时间】:2017-10-01 12:05:58
【问题描述】:

如果两个数组包含相同的值,我会尝试匹配它们,它将从数组之一中删除元素。我尝试使用splice() 方法。我尝试阅读但输出是:

new array ["SUGAR"]

但是,我想实现这个输出:

["HYDROGENATED VEGETABLE↵OIL", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "RAPESEED OIL", "PALM OIL"]

这是原始数组 (unSafe):

["SUGAR", "HYDROGENATED VEGETABLE↵OIL", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "RAPESEED OIL", "PALM OIL"]

这是我的代码:

function breakArray() {
  let warning = this.navParams.get("warningResult");
  let unSafe = this.navParams.get("unSafeResult");

  console.log(unSafe);
  console.log(warning);

  for (var i = 0; i < warning.length; i++) {
    for (var j = 0; j < unSafe.length; j++) {
      if (warning[i] === unSafe[j]) {
        console.log('warning', i);
        console.log('unSafe', j);

        unSafe.splice(j, 1);

        console.log('new array', unSafe);
      }
    }
  }
}

【问题讨论】:

    标签: javascript arrays typescript ionic2


    【解决方案1】:

    您需要确保 j 为 0。

    // Original array.
    var unsafe = ["SUGAR", "HYDROGENATED VEGETABLE↵OIL", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "RAPESEED OIL", "PALM OIL"];
    
    // Find the index of the item.
    let removeIndexStart = unsafe.indexOf('SUGAR');
    
    // Check if it exists.
    if (removeIndexStart > -1) {
      // Returns the removed items (from index 0, removing 1 item)
      // and modifies the array in-place.
      var removed = unsafe.splice(removeIndexStart, 1);
    
      console.log('Removed:', JSON.stringify(removed, null, 2));
    }
    
    console.log('Modified:', JSON.stringify(unsafe, null, 2));
    .as-console-wrapper { top: 0; max-height: 100% !important; }

    尝试反向工作:

    for (var i = warning.length - 1; i >= 0; i--) {
    

    并在更大的数组上进行操作,这正是您想要的。

    warning.splice(i, 1);
    

    let warning = ["SUGAR", "HYDROGENATED VEGETABLE↵OIL", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "RAPESEED OIL", "PALM OIL"];
    let unSafe =  ["SUGAR"];
    
    breakArray(); // I would pass in arguments.
    
    console.log('New array:', warning);
    
    function breakArray() {
      for (var i = warning.length - 1; i >= 0; i--) {
        for (var j = 0; j < unSafe.length; j++) {
          if (warning[i] === unSafe[j]) {
            console.log('warning', i);
            console.log('unSafe', j);
    
            warning.splice(i, 1);
          }
        }
      }
    }
    .as-console-wrapper { top: 0; max-height: 100% !important; }

    【讨论】:

    • 您好,它正在工作。如console.log 显示0:“氢化蔬菜↵油”1:“油菜籽油”2:“棕榈油”3:“葵花籽油”4:“油菜籽油”5:“棕榈油”谢谢您的帮助跨度>
    【解决方案2】:

    使用filter 方法代替splice 方法。你不想拼接你正在迭代的数组。

    let unsafeArray = ["SUGAR", "HYDROGENATED VEGETABLE↵OIL", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "RAPESEED OIL", "PALM OIL"];
    
    let warningArray = ["SUGAR", "SUNFLOWER OIL"];
    
    let filteredArray = unsafeArray;
    
    warningArray.forEach(function (warningElement) {
      filteredArray = filteredArray.filter(function (unsafeElement) {
        return unsafeElement !== warningElement;
      });
    });
    
    console.log(filteredArray);

    【讨论】:

    • 向后搜索总是可以拼接的。
    • 可以,但过滤器更简单 IMO
    【解决方案3】:

    似乎工作正常。返回没有“警告”元素的数组。

    function breakArray() {
      //let warning = this.navParams.get("warningResult");
      //let unSafe = this.navParams.get("unSafeResult");
      var warning = ["SUGAR"];
      var unSafe = ["SUGAR", "HYDROGENATED VEGETABLE↵OIL", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "RAPESEED OIL", "PALM OIL"];
    
      //console.log(unSafe);
      //console.log(warning);
    
      for (var i = 0; i < warning.length; i++) {
        for (var j = 0; j < unSafe.length; j++) {
          if (warning[i] === unSafe[j]) {
            //console.log('warning', i);
            //console.log('unSafe', j);
    
            unSafe.splice(j, 1);
    
            console.log('new array', unSafe);
          }
        }
      }
    }
    
    breakArray();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2021-03-12
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多