Создать объект с динамическими именами свойств на основе строк - PullRequest
0 голосов
/ 03 мая 2019

У меня есть этот массив объектов:

[
    {
        "id": 4,
        "user_id": 1,
        "business_id": 2,
        "branch_id": 3,
        "type": "service",
        "item": "Typing",
        "unitPrice": 100,
        "bulkUnit": 20,
        "bulkUnitPrice": 80,
        "availableUnits": "NA",
        "created_at": "2019-05-03 11:36:33",
        "updated_at": "2019-05-03 11:36:33"
    },
    {
        "id": 5,
        "user_id": 1,
        "business_id": 2,
        "branch_id": 3,
        "type": "service",
        "item": "Printing",
        "unitPrice": 70,
        "bulkUnit": 50,
        "bulkUnitPrice": 40,
        "availableUnits": "NA",
        "created_at": "2019-05-03 11:37:29",
        "updated_at": "2019-05-03 11:37:29"
    }
]

Для каждого объекта мне нужно использовать значение свойства item в качестве имени свойства в новом объекте, например:

{
    "Typing":  null,
    "Printing":  null
}

Ответы [ 5 ]

1 голос
/ 03 мая 2019

Вы можете назначить сопоставленные объекты одному объекту, взяв только свойство требуемого и принять это значение в качестве вычисляемого свойства.

var data = [{ id: 4, user_id: 1, business_id: 2, branch_id: 3, type: "service", item: "Typing", unitPrice: 100, bulkUnit: 20, bulkUnitPrice: 80, availableUnits: "NA", created_at: "2019-05-03 11:36:33", updated_at: "2019-05-03 11:36:33" }, { id: 5, user_id: 1, business_id: 2, branch_id: 3, type: "service", item: "Printing", unitPrice: 70, bulkUnit: 50, bulkUnitPrice: 40, availableUnits: "NA", created_at: "2019-05-03 11:37:29", updated_at: "2019-05-03 11:37:29" }],
    result = Object.assign({}, ...data.map(({ item }) => ({ [item]: null })));

console.log(result);
1 голос
/ 03 мая 2019

Этого можно добиться, используя комбинацию Array.prototype.map () и Object.fromEntries () .

const data = [
{"id":4,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Typing","unitPrice":100,"bulkUnit":20,"bulkUnitPrice":80,"availableUnits":"NA","created_at":"2019-05-03 11:36:33","updated_at":"2019-05-03 11:36:33"},
{"id":5,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Printing","unitPrice":70,"bulkUnit":50,"bulkUnitPrice":40,"availableUnits":"NA","created_at":"2019-05-03 11:37:29","updated_at":"2019-05-03 11:37:29"}
];

const result = Object.fromEntries(data.map(x => [x.item, null]));
console.log(result)
1 голос
/ 03 мая 2019

Массив .prototype .reduce ()

Вы можете выполнить функцию редуктора для каждого элемента и в результате получить объект.

const items = [{"id":4,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Typing","unitPrice":100,"bulkUnit":20,"bulkUnitPrice":80,"availableUnits":"NA","created_at":"2019-05-03 11:36:33","updated_at":"2019-05-03 11:36:33"},{"id":5,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Printing","unitPrice":70,"bulkUnit":50,"bulkUnitPrice":40,"availableUnits":"NA","created_at":"2019-05-03 11:37:29","updated_at":"2019-05-03 11:37:29"}];
const result = items.reduce((accumulator, currentValue) => {
  accumulator[currentValue.item] = null;
  return accumulator;
}, {});

console.log(result);
0 голосов
/ 03 мая 2019

Очень простой способ сделать это:

   <script>
 var oldJSON = '[{"id":4,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Typing","unitPrice":100,"bulkUnit":20,"bulkUnitPrice":80,"availableUnits":"NA","created_at":"2019-05-03 11:36:33","updated_at":"2019-05-03 11:36:33"},{"id":5,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Printing","unitPrice":70,"bulkUnit":50,"bulkUnitPrice":40,"availableUnits":"NA","created_at":"2019-05-03 11:37:29","updated_at":"2019-05-03 11:37:29"}]';

 // Convert to object
 var oldJSONObj = JSON.parse(oldJSON);

 var newJSONObj = {}

 // Loop through & get the value for item and add it to new JSON  
 for (var key in oldJSONObj) {
   if (oldJSONObj.hasOwnProperty(key)) {
     var val = oldJSONObj[key]["item"];
     newJSONObj[val] = null;
   }
 }
 //newJSONObj contains the JSON you require

 document.write(JSON.stringify(newJSONObj));

   </script>

   
0 голосов
/ 03 мая 2019

Просто зациклите элементы, возьмите item и поместите значение в новый объект:

const items = [
{"id":4,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Typing","unitPrice":100,"bulkUnit":20,"bulkUnitPrice":80,"availableUnits":"NA","created_at":"2019-05-03 11:36:33","updated_at":"2019-05-03 11:36:33"},
{"id":5,"user_id":1,"business_id":2,"branch_id":3,"type":"service","item":"Printing","unitPrice":70,"bulkUnit":50,"bulkUnitPrice":40,"availableUnits":"NA","created_at":"2019-05-03 11:37:29","updated_at":"2019-05-03 11:37:29"}
]

let result = {} 
items.forEach(i => { result[i.item] = null })
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...