Обновление свойств объекта изнутри массива - PullRequest
0 голосов
/ 04 августа 2020

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

function findObject(array, key, target) {
  //look through the array by creating a for loop

  for (let i = 0; i < array.length; i++) {

    //set conditional to check if an object in array has target value on its key prop

    if (array[i].key === target) {

      //if the above condition is met, return that object
      return array[i];
    }

  } //if its not return null
  return null;
}

Подсказка: 3. Реализуйте функцию findObject. Его параметры:

Один массив с именем array массив заполнен объектами Одна строка, называемая ключом Одна строка с именем target

Просмотрите массив и верните объект, который имеет целевое значение в своем ключевом свойстве

Возвращает null, если цель не найдена

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

При погружении в итерации сложно программировать. Петли for и forEach просты в обращении. Но, начав с map, filter, reduce, я понятия не имел, о чем они говорили.

var arr = [
    {'key': 13, 'jason': 12},
    {'mia': 12, 'jeremy': 12},
    {'teddy': 11, 'key': 13},
    {'mia': 12, 'key': 12},
];

function findObject(array, key, target){
    var res = [];
    var flag = false;
    array.forEach(ar => {
        try{
            // iterate dictionary by key
            for(var k in ar){
                // check key matches and value matches
                if(k === key && ar[k] === target){
                    flag = true;
                }
            }
            // use flag as an indicator for adding new object
            if(flag){
                res.push(ar);
                flag = false;
            }else{
                res.push(null);
            }
        }catch(err){}
    });
    return res;
}

console.log(findObject(arr, 'key', 13));
  1. Object.keys () возвращает массив всех ключей объекта
  2. массив быстрее повторяется функцией forEach
  3. концепция использования логического флага для неконтролируемых условных
  4. try {} catch (err) {} обрабатывает исключения

Приведенный выше код сложен по структуре, но лог c предельно ясно. мы сначала выполняем итерацию по массиву, а затем повторяем атрибуты объектов словаря, так как мы используем только pu sh данные один раз в течение каждого array.forEach, используем флаг, чтобы указать, следует ли использовать pu sh data или pu sh null.

var arr = [
    {'key': 13, 'jason': 12},
    {'mia': 12, 'jeremy': 12},
    {'teddy': 11, 'key': 13},
    {'mia': 12, 'key': 12},
];

var key = 'key';
var target = 13;
var result = arr.map(ar=>{return (Object.keys(ar).includes(key) && ar[key] === target) ? ar : null});

console.log(result);
  1. map () выполняет итерацию по массиву и присваивает каждому измененное значение
  2. условие? true_conduct: false_conduct: сокращение для оператора if

приведенный выше код обеспечивает однострочный способ достижения решения. Но это сложно понять. å Как новичок, я предлагаю вам написать больше кода самостоятельно. после того, как вы полностью справитесь с управлением итерацией for и условными операторами if, вы поймете, насколько просты сокращенные методы, такие как map.

0 голосов
/ 04 августа 2020

Кажется, что ключ - это строка, значением которой является имя свойства / ключа, который вы хотели найти. Пожалуйста, проверьте, работает ли следующий код для.

function findObject(array, key, target) {
let foundObj=null;
  //look through the array by creating a for loop

  for (let i = 0; i < array.length; i++) {

    //set conditional to check if an object in array has target value on its key prop

    if (array[i][key] === target) {

      //if the above condition is met, return that object
      foundObj=array[i];
      break;
    }

  } //if its not return null
  return foundObj;
}
console.log(findObject([{name:"usa",id:"usa"},{name:"uk",id:"uk"}],"name","usa"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...