obj [i] не повторяется в javascript при преобразовании данных - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь преобразовать мои данные из одного формата в другой, но я получаю ошибку obj[i] is not iterable, почему я хочу получить expected output, как показано ниже в переменной

const data = {
    "GENERAL": {
        "value": null,
        "type": "LABEL",
    },
    "Mobile NUMBER": {
        "value": "04061511",
        "type": "FIELD",

    },

   "Abc NUMBER": {
        "value": "89999",
        "type": "FIELD",

    },
    "Personal Info": {
        "value": null,
        "type": "LABEL",
    },
    "Address": {
        "value": "g-78",
        "type": "FIELD",

    }, "local": {
        "value": "090099",
        "type": "FIELD",

    }
}

const obj = {}
for (var i in data) {
    const {type} = data[i];
    if (type === 'LABEL') {
        obj[i] = []

    } else {
        obj[i] = [...obj[i], data[i]]
    }

}

console.log(obj)


const expectedout = {
    "GENERAL": [{
        "value": "04061511",
        "type": "FIELD",
        "displaytext": "Mobile NUMBER"

    }, {
        "value": "89999",
        "type": "FIELD",
        "displaytext": "Abc NUMBER"

    }],
  "Personal Info": [{
        "value": "g-78",
        "type": "FIELD",
        "displaytext": "Address"

    }, {
        "value": "090099",
        "type": "FIELD",
        "displaytext": "local"

    }]
}

Есть ли какие-либолучший подход для преобразования моих текущих данных в ожидаемые данные? Я ES6 в реакции вот мой код

https://jsbin.com/sesipuzeni/1/edit?html,js,console,output

Обновление

var obj = {
  "first":"first",
  "2":"2",
  "34":"34",
  "1":"1",
  "second":"second"
};
for (var i in obj) { console.log(i); };
VM5628:8 

кажется, свойство объекта donУ вас есть Guarantee.yes правильно, когда у вас есть число и строка

, но когда у вас всегда есть строка, она идет в том же порядке

var obj = {
  "first":{a:"jjj"},
  "yyy":{a:"jjqej"},
  "ttt":{a:"jjsqj"},
  "ggg":{a:"jjjs"},
  "second":{a:"jjcj"}
};
for (var i in obj) { console.log(i); };

1 Ответ

0 голосов
/ 08 декабря 2018

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

const data = {
  "GENERAL": {
    "value": null,
    "type": "LABEL",
  },
  "Mobile NUMBER": {
    "value": "04061511",
    "type": "FIELD",
  },

  "Abc NUMBER": {
    "value": "89999",
    "type": "FIELD",
  },
  "Personal Info": {
    "value": null,
    "type": "LABEL",
  },
  "Address": {
    "value": "g-78",
    "type": "FIELD",

  },
  "local": {
    "value": "090099",
    "type": "FIELD",
  }
}

const obj = {};
var lastLabel;
for (var i in data) {
  if (data[i].type === 'LABEL') {
    obj[i] = []
    lastLabel = i;
  } else {
    data[i].displaytext = i;
    obj[lastLabel] = [...obj[lastLabel], data[i]]
  }
}

console.log(obj)

Обратите внимание, что весь этот подход зависит от свойств объекта, сохраняющих свой порядок, что не гарантируется в JavaScript.Но я думаю, что это работает в большинстве существующих реализаций.

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