Es6 способ преобразования значения ключа объекта в один объект - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу преобразовать все данные в один объект,

let d = {
  "Coupon_Code": "code",
  "Coupon_Name": "namie",
  "Coupon_Desc": 1000,
  "selectedCity": [
    {
      "Coupon_City_Name": "xyz"
    }
  ],
  "selectedCategory": [
    {
      "Coupon_Category_Name": "Shopping"
    }
  ],
  "selectedCompany": [
    {
      "Coupon_Company_Name": "Shopper Stop"
    }
  ],
  "selectedState": [
    {
      "Coupon_State_Name": "abc"
    }
  ],
  "Coupon_Date": "2222-02-22",
}

Я попробовал несколько методов Object, таких как keys, entries, но не знаю, что использовать. Окончательный результат должен составлять

let d = {
  Coupon_Code: "code",
  Coupon_Name: "namie",
  Coupon_Desc: 1000,
  Coupon_City_Name: "xyz",
  Coupon_Category_Name: "Shopping",
  Coupon_Company_Name: "Shopper Stop",
  Coupon_State_Name: "abc",
  Coupon_Date: "2222-02-22",
};

, что является лучшим и оптимальным способом получить результат выше, используя Venila Js и Es6

Ответы [ 5 ]

0 голосов
/ 29 сентября 2018

Примерно так:

const d = { Coupon_Code: "code", Coupon_Name: "namie", Coupon_Desc: 1000, selectedCity: [{ Coupon_City_Name: "xyz" }], selectedCategory: [{ Coupon_Category_Name: "Shopping" }], selectedCompany: [{ Coupon_Company_Name: "Shopper Stop" }], selectedState: [{ Coupon_State_Name: "abc" }], Coupon_Date: "2222-02-22" };

function toSingleObj(obj) {
    var result = {};
    Object.entries(obj).forEach(([key,value]) => {
        if (Array.isArray(value)) {
            Object.entries(value[0]).forEach(([k,v]) => {
                result[k] = v;
            });
        } else {
            result[key] = value;
        }
    });
    return result;    
}


console.log("Result: ", toSingleObj(d));
0 голосов
/ 29 сентября 2018

Вы можете использовать рекурсивный подход.

const
    fn = o => Object.assign(...Object.entries(o).map(([k, v]) => Array.isArray(v) ? Object.assign(...v.map(fn)) : { [k]: v })),
    d = { Coupon_Code: "code", Coupon_Name: "namie", Coupon_Desc: 1000, selectedCity: [{ Coupon_City_Name: "xyz" }], selectedCategory: [{ Coupon_Category_Name: "Shopping" }], selectedCompany: [{ Coupon_Company_Name: "Shopper Stop" }], selectedState: [{ Coupon_State_Name: "abc" }], Coupon_Date: "2222-02-22" },
    result = fn(d);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 29 сентября 2018

Вы можете использовать Array.reduce и Object.entries

let d = {"Coupon_Code":"code","Coupon_Name":"namie","Coupon_Desc":1000,"selectedCity":[{"Coupon_City_Name":"xyz"}],"selectedCategory":[{"Coupon_Category_Name":"Shopping"}],"selectedCompany":[{"Coupon_Company_Name":"Shopper Stop"}],"selectedState":[{"Coupon_State_Name":"abc"}],"Coupon_Date":"2222-02-22"};

d = Object.entries(d).reduce((a,[k,v]) => {
  // If the value is an array, iterate over it to merge into the resultant object
  if(Array.isArray(v)) Object.assign(a, ...v)
  else Object.assign(a, {[k]:v}) // if it is not an array, merge into resultant object
  return a;
}, {});
console.log(d);
0 голосов
/ 29 сентября 2018

Возможное итеративное решение:

function flatten(obj) {
    let r = {}
    for (let [key, value] of Object.entries(obj)) {
        if (Array.isArray(value)) {
            Object.assign(r, value[0]);
        } else {
            Object.assign(r, {[key]: value});
        }
    }
    return r;
}
0 голосов
/ 29 сентября 2018

Уменьшить записей исходного объекта.Если значение записи является массивом, объедините 1-й элемент, если нет - объедините исходный ключ и значение.Вы можете объединить свойства в объект, используя объект распространения :

const data = {"Coupon_Code":"code","Coupon_Name":"namie","Coupon_Desc":1000,"selectedCity":[{"Coupon_City_Name":"xyz"}],"selectedCategory":[{"Coupon_Category_Name":"Shopping"}],"selectedCompany":[{"Coupon_Company_Name":"Shopper Stop"}],"selectedState":[{"Coupon_State_Name":"abc"}],"Coupon_Date":"2222-02-22"};

const result = Object.entries(data)
  .reduce((r, [k, v]) => ({
    ...r,
    ...Array.isArray(v) ? v[0] : { [k]: v }
  }), {});

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...