Функция, возвращающая последний объект, значения которого равны чему-либо.(JavaScript) - PullRequest
0 голосов
/ 15 мая 2018

Мне нужна функция, которая проверяет для каждого объекта в массиве, совпадает ли значение с объектом.

Но я не хочу возвращать все объекты, где это правда, а также нетво-первых, я хочу вернуть только последний объект, где name = array[i].name.

var allInfo = [
  {name: "Olaf", lastname: "Kranz", age:33},
  {name: "Mark", lastname: "Alien", age:21},
  {name: "Cindy", lastname: "Sunsi", age:65},
  {name: "Anna", lastname: "Pitter", age:20},
  {name: "Piet", lastname: "Schmitz", age:29}
];

var name = 'Cindy';
document.write(getIfNameIsAvailable(name));


function getIfNameIsAvailable(name) {
  for (i = allInfo.length; i >= 0; i--) {
    if (allInfo[i].name == name) {
      return allInfo[i].lastname;
      break;
    }
  }
};

Ответы [ 4 ]

0 голосов
/ 15 мая 2018

Просто упомянуть цикл while с индексом и уменьшением после проверки.

function getIfNameIsAvailable(name) {
    var i = allInfo.length

    while (i--) {
        if (allInfo[i].name == name) {
            return allInfo[i].lastname;
        }
    }
}

var allInfo = [{ name: "Olaf", lastname: "Kranz", age:33 }, { name: "Mark", lastname: "Alien", age:21 }, { name: "Cindy", lastname: "Sunsi", age:65 }, { name: "Anna", lastname: "Pitter", age:20 }, { name: "Piet", lastname: "Schmitz", age:29 }];

console.log(getIfNameIsAvailable('Cindy'));
0 голосов
/ 15 мая 2018

Ну, @TJ Crowder (Legend) уже дал вам причину, по которой вы столкнулись с проблемой.Я просто хотел бы сообщить вам другой способ сделать это.Таким образом, вам, возможно, не придется сталкиваться с такими проблемами.Попробуйте использовать JS готовые утилиты..find например.Одна строка кода и все готово

allInfo.find(o=> o.name === name)

var allInfo = [
  {name: "Olaf", lastname: "Kranz", age:33},
  {name: "Mark", lastname: "Alien", age:21},
  {name: "Cindy", lastname: "Sunsi", age:65},
  {name: "Anna", lastname: "Pitter", age:20},
  {name: "Piet", lastname: "Schmitz", age:29}
];

var name = 'Cindy';
document.write(getIfNameIsAvailable(name));


function getIfNameIsAvailable(name) {
  return allInfo.find(o=> o.name === name).lastname
};
0 голосов
/ 15 мая 2018
let allInfo = [
  {name: "Olaf", lastname: "Kranz", age:33},
  {name: "Mark", lastname: "Alien", age:21},
  {name: "Cindy", lastname: "Sunsi", age:65},
  {name: "Anna", lastname: "Pitter", age:20},
  {name: "Piet", lastname: "Schmitz", age:29},
  {name: "Cindy", lastName: "Surname", age: 22}
];

let getIfNameIsAvailable = (name, arr) => arr.slice(0).reverse().find(item => item.name == name);

let person = getIfNameIsAvailable('Cindy', allInfo);
0 голосов
/ 15 мая 2018

Три вопроса:

  1. Индексы массива: от length - 1 до 0, а не от length до 0, поэтому ваш код выдает ошибку при первом освобождении.
  2. Вам не нужно break после return, поскольку return выходит из функции (и, следовательно, цикла).
  3. Вам нужно необходимо объявить ваши переменные, включая счетчики циклов, такие как i. Если нет, вы получите то, что я называю Ужас неявных глобалов .

С помощью - 1, удалив break и объявив i & mdash; Я также изменил имя Марка Аллена на Синди, чтобы мы могли видеть, что он действительно захватывает последнюю Синди:

var allInfo = [
  {name: "Olaf", lastname: "Kranz", age:33},
  {name: "Cindy", lastname: "Alien", age:21},
  {name: "Cindy", lastname: "Sunsi", age:65},
  {name: "Anna", lastname: "Pitter", age:20},
  {name: "Piet", lastname: "Schmitz", age:29}
];

var name = 'Cindy';
document.write(getIfNameIsAvailable(name));

function getIfNameIsAvailable(name) {
  for (var i = allInfo.length - 1; i >= 0; i--) {
    if (allInfo[i].name == name) {
      return allInfo[i].lastname;
    }
  }
};
...