2016-07-17 1 views
-1

У меня есть запрос к базе данных, которая возвращает мне массив со следующим форматом:Перемещение и удаление ключей в объекте JS, возвращаемом запросом Sequelize?

[ 
    { score: 1, User: { username: 'user111' } }, 
    { score: 2, User: { username: 'user222' } } 
] 

я хотел бы, чтобы переместить user.username каждого партитуры только имя пользователя. Вот что я делаю:

 console.log(JSON.parse(JSON.stringify(scores))); 
     for (var i = 0, len = scores.length; i < len; i++) { 
      scores[i].username = scores[i].User.username; 
      delete scores[i].User; 
     } 
     console.log("------------------"); 
     console.log(JSON.parse(JSON.stringify(scores))); 

Это, к сожалению, кажется, не работает, не знаю, почему:

code result

+2

Работы здесь: https://jsfiddle.net/7cju75nm/ – bloodyKnuckles

+0

Какого черта .... Может ли node.js что-то с этим делать? – user1255410

+1

Являются ли ваши объекты замороженными (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) или что-то в этом роде? – Oriol

ответ

-1

Хорошо для тех, кто интересуется, кто может наткнуться на это:

Как я уже сказал, я получаю оценки как результат базы данных от Seqelize ORM. Это, по-видимому, не простой объект Javascript поэтому для каждого балла я должен был сделать этот трюк:

scores[i] = JSON.parse(JSON.stringify(scores[i])); 

Edit:

возвращаемые объекты Sequelize от запросов содержат всю внутреннюю информацию о модели, а также. Чтобы избавиться от этого с использованием более удобного для использования подхода, используйте параметр plain: true (Sequelize 3.x). Вот полное решение:

 for (var i = 0, len = scores.length; i < len; i++) { 
      scores[i] = scores[i].get({ plain: true }); 
      scores[i].username = scores[i].User.username; 
      delete scores[i].User; 
     } 
+0

У этого ужасное представление! – Lux

+0

Изменено мое решение. Твой не работал в Sequelize. – user1255410

-1

Я бы рекомендовал вам копировать то, что вам нужно новые объекты:

const keys = Object.keys(scores[0]).filter(key => key != 'User'); 
scores = scores.map(score => { 
    const res = {}; 
    keys.forEach(key => { 
    res[key] = score[key]; 
    }); 
    res.username = score.User.username; 
    return res; 
}); 

Это предполагает, что все оценки имеют одинаковые ключи, но производительность должна быть не так уж плохо. Его O(n*m) где n - это количество элементов в массиве и m номер ключа, который вы хотите скопировать.