Попытка сравнить с массивами в JavaScript с помощью следующего подхода.

 return stack1.forEach((v, i) => v === stack2[i]);

Я хочу, чтобы он работал, но он возвращает undefined вместо true или false, если массивы одинаковы.

Вот полный код:

const backspace_compare = function(str1, str2) {
  let stack1 = [];
  let stack2 = [];
  for (let i = 0; i < str1.length; i++) {
    str1[i] === "#" ? stack1.pop() : stack1.push(str1[i]);
  }
  for (let i = 0; i < str1.length; i++) {
    str2[i] === "#" ? stack2.pop() : stack2.push(str2[i]);
  }
  return stack1.forEach((v, i) => v === stack2[i]);
};

Любая помощь по исправлению того, как я сравниваю массивы с использованием аналогичного подхода, была бы очень признательна.

2
mangokitty 27 Окт 2019 в 14:57
3
forEach возвращает undefined, может быть, вы хотите использовать вместо этого .every()?
 – 
Nick Parsons
27 Окт 2019 в 14:59
1
Это именно то, что мне нужно, работает отлично.
 – 
mangokitty
27 Окт 2019 в 15:00

1 ответ

Лучший ответ

Вот несколько методов, которые я использую для сравнения двух массивов в JS. Обычно я предпочитаю JSON.stringify.

Однако я считаю, что ваш метод самый быстрый, просто вы должны использовать .every() вместо forEach().

let stack1 = [1, 2, 3, 4];
let stack2 = [1, 2, 3, 4];

console.log('every compare:', stack1.every((v, i) => v === stack2[i]));
// or
console.log('toString compare:', stack1.toString() === stack2.toString());
// or
console.log('JSON compare:', JSON.stringify(stack1) === JSON.stringify(stack2));
// or
console.log('short compare:', stack1+'' === stack2+'');
2
vrintle 22 Дек 2020 в 12:31
PS: Если кто-то захочет подарить мне шапку, то просто проголосуйте за мой ответ, что весьма кстати :)
 – 
vrintle
22 Дек 2020 в 12:34