Нужна помощь Array для цикла If else - PullRequest
0 голосов
/ 04 сентября 2018

нужна помощь с массивом циклов, я хочу противоположные данные функции, но когда я пытаюсь arr[i] != elem распечатать весь массив; и если я попытаюсь arr[i] == elem, это даст мне массив, который мне не нужен; до сих пор не понимаю, почему это не работает с != (not equal).

function filteredArray(arr, elem) {
let newArr = [];
// change code below this line
for(let i = arr.length -1; i >= 0 ; i--) {
  for(let j = arr[i].length-1;j >= 0;j--) {
    if(arr[i][j] !== elem) {
        newArr.push(arr[i]);
     }
   }
 }
 // change code above this line
  return newArr;
}

console.log(filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2));

результат, который я хочу получить ["flutes", 4] извините, если об этом спрашивали другие, я искал ответ через Google, но не могу его найти.

спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

function filteredArray(arr, elem) {
  var resultArray = arr.filter(function(item) {
    return item.indexOf(elem) == -1;
  });
  return resultArray[0]
}
console.log(
  filteredArray([["trumpets", 2], ["flutes", 4], ["saxophones", 2]], 2)
);
console.log(
  filteredArray([ ["amy", "beth", "sam"], ["dave", "sean", "peter"] ], "peter")
);

Этот фрагмент кода возвратит первый элемент во входном массиве, который не соответствует данному второму параметру функции. Если нам нужны все элементы, которые не совпадают, замените return resultArray[0] на return resultArray.

Рассмотрим случай, когда мы вызываем эту функцию со следующим параметром,

filteredArray([["trumpets", 2], ["flutes", 4], ["saxophones", 5]], 2)

return resultArray[0] даст ["flutes", 4]

Если нам нужны все элементы, которые не совпадают, мы можем сделать

return resultArray даст [["flutes", 4], ["saxophones", 5]]

0 голосов
/ 04 сентября 2018

Вы были почти там!

Вы проверяли каждое значение в массиве. Т.е.: 2 !== "trumpets" и 2 !== 2. Поэтому все массивы были вытолкнуты, потому что все массивы имели строковое значение, которое никогда не будет совпадать.

Удалите второй цикл и явно проверьте второе значение внутреннего массива:

function filteredArray(arr, elem) {
let newArr = [];
// change code below this line
for(let i = arr.length -1; i >= 0 ; i--) {
    if(arr[i][1] !== elem) {
        newArr.push(arr[i]);
     }
 }
 // change code above this line
  return newArr;
}

console.log(filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2));

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

function filteredArray(arr, elem) {
  return arr.filter(values => !values.includes(elem));
}

console.log(filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2));

console.log(filteredArray([ ["amy", "beth", "sam"], ["dave", "sean", "peter"] ], "peter"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...