debugging 将Javascript代码调试到开发工具Chrome

to94eoyn  于 2022-11-14  发布在  Java
关注(0)|答案(1)|浏览(192)

我正在学习在DevTools Chrome中调试代码。在处理这样的任务时,我遇到了以下问题。

function Access(arr1, arr2) {
  let sorty= arr1.concat(arr2).sort((a, b) => {
    if (a > b) return 1;
    if (a == b) {
      
      return 0;
    }
    if (a < b) return -1;
  });
  debugger;
  // console.log(sorty);
  return sorty.filter((beg,end)=>{
    console.log ('beg: ' , beg,'   end: ', end);
    console.log ('indexOf(beg): ', sorty.indexOf(beg), "   indexOf(end): ", sorty.indexOf(end));
    return sorty.indexOf(beg)===end});
}
console.log( 'p'+ Access([1,4,3,5],[3,7,8,4,5])+' s');

在调试面板堆栈中,我看到两个传入数组,一个被粘附和排序的数组。但是在上次检查indexOf时得到的数组在任何地方都找不到。它只出现在函数的末尾。我如何在indexOf检查时看到数组被写在哪里?第二个问题。我在函数本身中有console.log语句。然后是通过控制台的函数调用。log -最后一行。为什么在调用函数时,字母“p”写在一个完全处理过的数组的输出之前?正如我所假设的,字母“p”应该出现在数组的元素和索引的输出之前。enter image description here
谢谢你的帮助。

mspsb9vt

mspsb9vt1#

您可以使用reduce()来调试逐渐形成的数组,因为它允许您使用累加器(在本例中声明为a):

function Access(arr1, arr2) {
  let sorty= arr1.concat(arr2).sort((a, b) => {
    if (a > b) return 1;
    if (a == b) {
      return 0;
    }
    if (a < b) return -1;
  });
  return sorty.reduce((a,beg,end)=>{
    let ret
    if (sorty.indexOf(beg)===end) {
      ret = a.concat([beg])
    } else {
      ret = a
    }
    debugger
    return ret
  }, []);
}

console.log('p' + Access([1,4,3,5],[3,7,8,4,5]) + 's');

为了回答第二个问题,代码console.log( 'p'+ Access([1,4,3,5],[3,7,8,4,5])+' s');正在连接字符串,并且只有在返回Access()时才会输出。
这显示了如何使用三个不同的console.log()首先输出p

function Access(arr1, arr2) {
  let sorty= arr1.concat(arr2).sort((a, b) => {
    if (a > b) return 1;
    if (a == b) {
      
      return 0;
    }
    if (a < b) return -1;
  });
  debugger;
  // console.log(sorty);
  return sorty.filter((beg,end)=>{
    console.log ('beg: ' , beg,'   end: ', end);
    console.log ('indexOf(beg): ', sorty.indexOf(beg), "   indexOf(end): ", sorty.indexOf(end));
    return sorty.indexOf(beg)===end});
}

console.log('p');
console.log(Access([1,4,3,5],[3,7,8,4,5]));
console.log('s');

相关问题