Использование функции для цикла for-in через объект для изменения значений и возврата результата

Я создаю функцию, которая использует цикл for-in для прохождения через любой объект, изменения его значений (будь то число, строка или логическое значение) в одну конкретную строку, а затем вывод ее. Я прошел через множество существующих вопросов, которые помогли мне получить общее представление о циклах for-in. Я пытался выяснить, как заставить функцию внести изменения, а затем вернуть новые значения. Вот что у меня так далеко:

var switcharoo = function(whateverObject){
  for (var i in whateverObject){
    if (whateverObject.hasOwnProperty(i)){
  alert(i + "redacted" + whateverObject[i]);
    }
  }
return whateverObject;
};    

Я понимаю структуру, которую я настроил для функции. Я понимаю структуру цикла for-in. Я также понимаю важность части hasOwnProperty. Теперь я потерян...

alert(i + "this is a string" + whateverObject[i]);

линия, я не могу обернуть голову вокруг. Я получил это от вопроса здесь, на Stackru. Строка return whatObject - это лучшее, что я могу сделать, чтобы вывести результат. Так как же мне пройти через объект и изменить все значения на определенную строку?

Дополнительный вопрос: как мне настроить эту функцию для поиска истинных / ложных значений и удаления только ложных?

2 ответа

Решение

Проблема в том, что... ты вообще ничего не меняешь:D

alert просто отображает значение, но больше ничего не делает.

var switcharoo = function(whateverObject){
  for (var i in whateverObject){
    if (whateverObject.hasOwnProperty(i)){
      alert(i + "redacted" + whateverObject[i]);

      // Assign value to this key in whateverObject
      whateverObject[i] = 'redacted';

    }
  }
  return whateverObject;
}; 

Как бы я настроить эту функцию для поиска истинных / ложных значений и удалить только ложные?

Теперь немного о продвинутом JavaScript. Ты можешь использовать Object.keys получить массив ключей объекта. Используйте этот массив, чтобы пройти через все ключи в объекте. Вы можете использовать reduce построить объект только с ключами, которые не имеют false ценности.

function switcharoo(object){
  return Object.keys(object).reduce(function(allTrue, key){
    if(object[key] !== false) allTrue[key] = object[key];
    return allTrue;
  }, {});
}

Другой подход

var switcharoo = (o,s) => Object.keys(o).reduce((p,k) => {p[k] = s; return p},{}),
         myObj = {a: 1,
                  b: _ => console.log(this.a),
                  c: {x: 3,
                      y: "hi there",
                      z: [1,2,3]
                     }
                 };
document.write("<pre>" + JSON.stringify(switcharoo(myObj, "stractassineboom"), null, 2) + "</pre>");

Другие вопросы по тегам