filter方法用另一个数组替换一个数组

时间:2016-07-06 12:54:52

标签: javascript arrays filter

我试图从另一个数组中过滤掉一个数组的值。使用Javascript的过滤方法时,我的脚本看起来像这样。

public class App extends Application {

  @Override public void onCreate() {
    super.onCreate();

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}

根据文档,在我运行过滤器函数后控制var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; areas.filter(function(){ return areas = notUsed; }) console.log(areas); 数组时,数组应该如下所示

areas

但是,这不是发生了什么。相反,我获得了"A Area", "B Area", "C Area" 数组的值,因此它基本上用notUsed数组替换了area数组。任何人都可以解释为什么会发生这种情况以及如何在没有notUsed数组值的情况下获取areas数组?

如果已经提出这个问题,请在评论中告诉我并链接到已回答的问题。这样我就可以删除这个并消除重复。

4 个答案:

答案 0 :(得分:1)

两个错误。

  1. areas = notUsed只会将notUsed的值分配给areas,但它不会对它们进行比较。

  2. filter返回一个新数组。它不会改变原始数组。

  3. 可能你可以像这样写

    areas = areas.filter(function (area) {
      return notUsed.indexOf(area) === -1;
    });
    

    现在,notUsed.indexOf(area)返回area数组中notUsed的索引。如果找不到,那么它将返回-1

    另外,请参阅我们将filter的结果分配回areas

答案 1 :(得分:0)

您还没有正确理解过滤器的使用。

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"];

var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"];

var res = areas.filter(function(ele){
    return (notUsed.indexOf(ele) == -1)
})
console.log(res);

答案 2 :(得分:0)

Filter函数应根据您实现的条件测试数组中的值。在您的示例中不是这种情况。 Filter Function

这可能是一个可能的解决方案。

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"];

var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"];

var filtered = areas.filter(value => { return notUsed.indexOf(value) === -1 })
console.log(filtered);

答案 3 :(得分:0)

margin方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

filter()