фильтр и включает в себя выдачу неожиданного результата - PullRequest
0 голосов
/ 03 февраля 2020

Я вижу здесь что-то очень странное, что я не могу понять. Я пытаюсь вернуть строку через запятую, содержащую числа, встречающиеся в элементах strArr.

. Вы увидите в аргументе, переданном FindIntersection, то есть ["1, 2, 4, 5, 6, 9", "2, 3, 4, 8, 10"], в котором 2 встречается оба массива, но он не обнаружен в тесте filter includes. Кто-нибудь может объяснить это?

const FindIntersection = (strArr) => {

  const strArrOne = strArr[0].split(',')
  const strArrTwo = strArr[1].split(',')
  const intersection = strArrOne.filter(item => {
    console.log('2',strArrTwo)
    console.log('item --> ', item)
    console.log('includes ---> ', strArrTwo.includes(item))
    return strArrTwo.includes(item)
  }).join(',').replace(/\s/g, '');
  console.log(intersection)
  return intersection;
}
   
console.log(FindIntersection(["1, 2, 4, 5, 6, 9", "2, 3, 4, 8, 10"]));

Ответы [ 4 ]

2 голосов
/ 03 февраля 2020

Для каждого из элементов в массиве 1 существует начальный пробел, поэтому вам необходимо обрезать () элементы перед их сравнением.

const FindIntersection = (strArr) => {

  const strArrOne = strArr[0].split(',').map(x => x.trim())
  const strArrTwo = strArr[1].split(',').map(x => x.trim())
  const intersection = strArrOne.filter(item => {
    return strArrTwo.includes(item)
  }).join(',').replace(/\s/g, '');
  console.log(intersection)
  return intersection;
}
   
console.log(FindIntersection(["1, 2, 4, 5, 6, 9", "2, 3, 4, 8, 10"]));
1 голос
/ 03 февраля 2020

Поскольку ожидается, что первый элемент в массивах, другие элементы имеют пробел перед номером. Чтобы решить эту проблему, вы можете сопоставить все элементы для преобразования элементов в число, например ниже:

const FindIntersection = strArr => {
    const strArrOne = strArr[0].split(",").map(item => Number(item));
	const strArrTwo = strArr[1].split(",").map(item => Number(item));
    const intersection = strArrOne
        .filter(item => {
            console.log("2", strArrTwo);
            console.log("item --> ", item);
            console.log("includes ---> ", strArrTwo.includes(item));
            return strArrTwo.includes(item);
        })
        .join(",")
        .replace(/\s/g, "");
    console.log(intersection);
    return intersection;
};

console.log(FindIntersection(["1, 2, 4, 5, 6, 9", "2, 3, 4, 8, 10"]));
0 голосов
/ 03 февраля 2020

Удаление пробелов - самое простое исправление

const FindIntersection = (strArr) => {

  const strArrOne = strArr[0].split(',')
  const strArrTwo = strArr[1].split(',')
  const intersection = strArrOne.filter(item => {
    console.log('2',strArrTwo)
    console.log('item --> ', item)
    console.log('includes ---> ', strArrTwo.includes(item))
    return strArrTwo.includes(item)
  }).join(',').replace(/\s/g, '');
  console.log(intersection)
  return intersection;
}
   
console.log(FindIntersection(["1,2,4,5,6,9", "2,3,4,8,10"]));
0 голосов
/ 03 февраля 2020

У вас есть дополнительный пробел перед 2 в первом элементе массива, вам нужно удалить его, так как он включает === для проверки существования

const FindIntersection = (strArr) => {

  const strArrOne = strArr[0].split(',').map(s=> s.replace(/\s/g,''))
  const strArrTwo = strArr[1].split(',').map(s=> s.replace(/\s/g,''))
  const intersection = strArrOne.filter(item => {
    console.log('2',strArrTwo)
    console.log('item --> ', item)
    console.log('includes ---> ', strArrTwo.includes(item))
    return strArrTwo.includes(item)
  }).join(',').replace(/\s/g, '');
  console.log(intersection)
  return intersection;
}
   
console.log(FindIntersection(["1, 2, 4, 5, 6, 9", "2, 3, 4, 8, 10"]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...