#javascript
Вопрос:
Я пишу небольшой код JSON, который должен принимать ключевые значения и создавать новый JSON. Я могу сделать это, используя приведенный ниже код. Но здесь я хочу переименовать ключ на основе условия.
var data = [{
'name': 'a',
'val': 5
}, {
'name': 'b',
'val': 6
}, {
'name': 'c',
'val': 25
}, ]
var hash = data.reduce(function(p, c) {
var n = c.name;
p[n] = p[n] || {};
if (n == 'a')
n= 'r';
p[n] = c.val;
return p;
}, {});
var result = Object.keys(hash).map(function(e) {
let el = {};
el[e] = hash[e];
return el;
});
console.log(result);
Ожидаемый результат составляет
[ {
r: 5
}, {
b: 6
}, {
c: 25
}]
пожалуйста, дайте мне знать, где я ошибаюсь.
Спасибо
Ответ №1:
Вы можете сделать это с помощью однострочной карты() и вычисляемого свойства
const data=[{name:"a",val:5},{name:"b",val:6},{name:"c",val:25}];
const res = data.map(({name:n, val:v}) => ({[n === 'a' ? 'r' : n]: v}))
console.log(res)
Ответ №2:
Вам просто нужно удалить p[n] = p[n] || {};
.
Когда n
есть a
, это создает нежелательное a: {}
, чего вы не хотите.
Ответ №3:
О, я писал какой-то код и, очевидно, неправильно понял вопрос. Поэтому мой код вместо этого делает что-то другое, не очень уместное, хотя, лол. ФУ-У-У
function translate(data, matrix) {
return data.map(
map=>Object.fromEntries(
Object.keys(map).map(key => [matrix[key]||key, map[key]])
)
)
}
translate(data, {"name": "foo"})
// [ { foo: 'a', val: 5 }, { foo: 'b', val: 6 }, { foo: 'c', val: 25 } ]