Итак, я понимаю, к чему вы клоните, но лично я бы вообще избегал Object.values()
. Как правило, решая, что делать с массивом, я пытаюсь задать следующие вопросы:
- Я хочу извлечь подмножество значений из объекта на основе ключей? -> используйте
Object.keys()
для фильтрации - Я хочу извлечь из объекта подмножество значений на основе значений? -> используйте
Object.values()
- Я хочу превратить один массив в другой такой же длины? -> используйте
array.map()
- Я хочу превратить один массив в более короткий массив? -> используйте
array.filter()
- Хочу ли я преобразовать массив в одно значение, например строку? -> используйте
array.reduce()
Поскольку вам нужно подмножество значений из объекта на основе ключей, и вы хотите превратить его в строку, тогда нам, вероятно, следует использовать Object.keys()
, array.filter()
, а затем array.reduce()
вот так:
let obj = {
Hostname: "abc",
id: 189883,
message: "error message",
name: "script name"
};
let resultString = Object.keys(obj) //gets an array of keys from the object
.filter(key => key != "Hostname") //removes 'Hostname' from the array
.reduce((accumulator, key) =>
accumulator == "" ? accumulator + obj[key] : accumulator + ":" + obj[key],
"");
console.log(resultString);
Если вы запустите этот фрагмент кода, вы обнаружите, что он выводит строку точно так, как вы надеялись каждый раз. Тернарный оператор внутри редуктора - это просто хитрый способ добавления символа двоеточия ":" перед каждым новым значением, если оно не является первым.