Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组的差异,结果为1或未定义_Javascript_Arrays_Node.js_Difference - Fatal编程技术网

Javascript 数组的差异,结果为1或未定义

Javascript 数组的差异,结果为1或未定义,javascript,arrays,node.js,difference,Javascript,Arrays,Node.js,Difference,数组a=[1,2,3,4,5,5] 数组b=[1,2,3,5] c=a-b 它应该返回c=[4](5重复了两次,但我不希望它出现在输出中) 下面是我的代码: function arrayDiff(a, b) { var array = []; var diff = []; for (var i = 0; i<a.length; i++) { array[a[i]] = true; } for (var i = 0; i<b.length; i++) {

数组a=[1,2,3,4,5,5]

数组b=[1,2,3,5]

c=a-b

它应该返回
c=[4]
(5重复了两次,但我不希望它出现在输出中) 下面是我的代码:

function arrayDiff(a, b) {
  var array = [];
  var diff = [];
  for (var i = 0; i<a.length; i++) {
    array[a[i]] = true;
  }

  for (var i = 0; i<b.length; i++) {
    if (array[b[i]]) {
      delete array[b[i]];
    }
    else {
      array[b[i]] = true;
    }

    for (var k in array) {
      return diff.push(k);
    }

  }

}
Test.describe("Sample tests", function() {
  Test.it("Should pass Sample tests", function() {
    Test.assertDeepEquals(arrayDiff([], [4,5]), [], "a was [], b was [4,5]");
    Test.assertDeepEquals(arrayDiff([3,4], [3]), [4], "a was [3,4], b was [3]");
    Test.assertDeepEquals(arrayDiff([1,8,2], []), [1,8,2], "a was [1,8,2], b was []");
  });
}); 

你能帮我修一下吗?

你的代码看起来不错。它可能需要一些修改来简化

function arrayDiff(a, b) {
  return a.filter((aItem) => b.indexOf(aItem) === -1);
}
您可以选择一个过滤器并过滤阵列

函数arrayDiff(a,b){
const-setB=新集合(b);
返回a.filter(v=>!setB.has(v));
}

log(arrayDiff([1,2,3,4,5,5],[1,2,3,5])您的代码中有几个问题

  • 嵌套在第二个for循环内的第三个for循环不应嵌套在第二个循环内

  • .push()
    方法在数组中添加一个新项,并在添加新项后返回数组的长度。您需要返回
    diff
    array,而不是返回push函数的返回值

  • 这是固定密码

    const a=[1,2,3,4,5,5];
    常数b=[1,2,3,5];
    函数arrayDiff(a,b){
    var数组=[];
    var-diff=[];
    
    对于(var i=0;iCan u请解释它是如何工作的?我不熟悉
    =>
    (params)=>exp
    表示
    函数(params){return exp;}
    。它被称为arrow函数
    filter
    数组函数,它以一个函数作为参数。参数函数必须返回
    true
    false
    。因此
    filter
    函数返回符合条件的新数组。好的,我明白了。它看起来像巴贝尔,我使用过一点,但我没有使用过它的经验。比当我尝试你的代码时,也出现了一些错误:``a是[],b是[4,5]-预期的:[],而不是得到的:['4',5']a是[3,4],b是[3]-预期的:[4],而不是得到的:['4']a是[1,8,2],b是[]-预期的:[1,8,2],而不是得到的:['1',2',8']```更改
    diff.push(k);
    diff.push(Number(k));
    尝试
    a=[]
    ,``b=[1,2]
    。它返回
    [1,2]。如果我们在else语句中将
    array[b[i]
    更改为
    array[a[i]
    ,它将返回
    [NaN
    。还可以尝试wirh
    a=[1,8,2]
    我不知道你想说什么。当
    a=[]
    b=[1.2]
    时,它还应该返回什么?它应该返回
    c=a-b
    所以
    []-[1,2]
    应该返回[],而
    [1,8,2]-[/code>应该返回
    [1,8,2]
    它可以工作,但我需要使用类似于我上面创建的代码的函数来运行它
    function arrayDiff(a, b) {
      return a.filter((aItem) => b.indexOf(aItem) === -1);
    }