将JS Array中的键值对减少为object

mch*_*l18 2 javascript arrays

我有一个对象,我必须分成两个数组才能正确处理.它看起来像这样:

{
  city:"stuttgart",
  street:"randomstreet",
  ...
}
Run Code Online (Sandbox Code Playgroud)

由于它需要适合某个指令,我必须将其转换为:

[
  {key:"city", value:"stuttgart"}
  {key:"street", value:"randomstreet"},
  ...
]
Run Code Online (Sandbox Code Playgroud)

为此,我首先使用

var mapFromObjectWithIndex = function (array) {
  return $.map(array, function(value, index) {
    return [value];
  });
};

var mapFromObjectWithValue = function (array) {
  return $.map(array, function(value, index) {
    return [index];
  });
});
Run Code Online (Sandbox Code Playgroud)

创建两个数组,一个包含旧键,另一个包含旧值.然后我创建了另一个二维数组,将它们映射到一个单独的数组中

var mapToArray = function (arrayValue, arrayIndex) {
  var tableData = [];
  for (var i = 0; i<arrayIndex.length; i++){
    tableData[i] = {key:arrayIndex[i] , value:arrayValue[i]};
  }
  return tableData;
};
Run Code Online (Sandbox Code Playgroud)

(也许我已经搞砸了,这可以更轻松吗?)

现在,我使用数组(tableData)来显示表单中的数据.可以编辑值字段.最后,我想将数组(tableData)转换为原始数组.(见第一个对象)

请注意,原始对象不仅包含字符串作为值,还可以包含对象.

rpa*_*ani 8

我认为转换肯定更容易:

var obj = {
  city:"stuttgart",
  street:"randomstreet",
};

var tableData = Object.keys(obj).map(k => {return {key: k, value: obj[k]}});

console.log(tableData);

var dataBack = {};
tableData.forEach(o => dataBack[o.key] = o.value);

console.log(dataBack);
Run Code Online (Sandbox Code Playgroud)

你想用对象做什么?你想扩展它们吗?如果是,你可以做这样的事情(它也适用于嵌套对象):

var obj = {
  city:"stuttgart",
  street:"randomstreet",
  obj: {a: 'a', b: 'b'},
  subObject: {aha: {z: 'z', y: 'y'}}
};

function trasformToTableData(obj) {
  if (typeof obj !== 'object') return obj;
  return Object.keys(obj).map(k => {return {key: k, value: trasformToTableData(obj[k])}});
}

var tableData = trasformToTableData(obj);
console.log(tableData);

function transformBack(obj) {
  if (Array.isArray(obj)) {
    var support ={};
    for (let i = 0; i < obj.length; i++) {
      support[obj[i].key] = transformBack(obj[i].value)
    }
    return support;
  }
  return obj;
}

var dataBack = {};
tableData.forEach(o => dataBack[o.key] = transformBack(o.value));

console.log(dataBack);
Run Code Online (Sandbox Code Playgroud)