Использование функции для цикла 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>");