提取对象的属性,然后将其拼接到另一个对象中

Extracting an object's properties, then splicing it into another object?

本文关键字:拼接 一个对象 取对象 属性 然后 提取      更新时间:2023-09-26

我对JS世界很陌生,并试图将我的头脑围绕对象。

只是为了说明一点上下文,我的最终实验如下:我有一个表,它显示从csv收集的数据。这工作得很好!现在,下一个挑战是复制该表的现有列。事情很快就散架了……

我意识到我需要做的第一件事是提取我想要复制的表的"列"。当然,当我说列时,我指的是"属性"(恰好显示为列)。

这个for循环不起作用:

var namelist = [CSV Data]; // assume it's loaded
var templist = [];
for(var i =0; i < namelist.length; i++) {
   templist[i] = $namelist[i].NAME;
   console.log(templist[i]);
};

这只是返回数组中的名称列表…我需要这个对象输出"NAME: Bob Smith"而不仅仅是"Bob Smith"……我认为第一步是提取属性/列作为它自己的对象,然后将该属性作为应用于对象的每个"行"/实例的新属性注入主组合。

需要注意的是,这是一个嵌套对象,json格式类似如下:

[
  {
    "ATTRIBUTES":"ACTIVE",
    "CODE":"21124",
    "TITLE":"JOB1",
    "NAME":"BOB SMITH",
  },
  {
    "ATTRIBUTES":"ACTIVE",
    "CODE":"14232",
    "TITLE":"JOB2",
    "NAME":"JOE SHMOE",
  },
  {
    "ATTRIBUTES":"ACTIVE",
    "CODE":"234234",
    "TITLE":"JOB3",
    "NAME":"MARY JONES",
  }
]

在我注入副本之后,它应该看起来像这样:

[
  {
    "ATTRIBUTES":"ACTIVE",
    "CODE":"21124",
    "TITLE":"JOB1",
    "NAME":"BOB SMITH",
    "NAME2":"BOB SMITH",
  },
  {
    "ATTRIBUTES":"ACTIVE",
    "CODE":"14232",
    "TITLE":"JOB2",
    "NAME":"JOE SHMOE",
    "NAME2":"JOE SHMOE",
  },
  {
    "ATTRIBUTES":"ACTIVE",
    "CODE":"234234",
    "TITLE":"JOB3",
    "NAME":"MARY JONES",
    "NAME2":"MARY JONES",
  }
]

我期待你的想法!谢谢你。

p。我正在AngularJS框架中工作,如果有帮助的话,可能不会,因为我认为这是一个非常"基本"的核心javascript问题。

您可以使用几个帮助程序来完成此操作。首先,由于JavaScript对象是通过引用传递的,我建议不要改变原始对象,因此需要一个助手来扩展对象。然后你可以使用map来创建一个新的集合:

var coll = [
  {
    attributes:"active",
    code:21124,
    title:"job1",
    name:"Bob Smith",
  },
  {
    attributes:"active",
    code:14232,
    title:"job2",
    name:"Joe Shmoe",
  },
  {
    attributes:"active",
    code:234234,
    title:"job3",
    name:"Mary Jones",
  }
];
function extend(a, b) {
  Object.keys(b).forEach(function(k) {
    a[k] = b[k];
  });
  return a;
}
// @param {Object} props
//   where key is the property to duplicate,
//   and value the duplicate key name.
// @param {Array} a collection
function duplicateProperties(props, coll) {
  return coll.map(function(x) {
    var y = extend({}, x);
    for (var i in props) {
      y[props[i]] = x[i];
    }
    return y;
  });
}
// Usage
var coll2 = duplicateProperties({name: 'name2'}, coll);

我也建议不要在你的代码中使用所有的大写字母。如果你需要在UI代码(通常是CSS)中更改文本格式,不要硬编码;它读起来很差,而且很麻烦。JavaScript中的ALL CAPS是一种标识常量的约定。当你得到数字时,确保你得到的是数字,而不是字符串。我们的想法是尽可能地从源处润色您的数据,这样您就不必在前端弄乱它。如果数据已经乱了,可以考虑构建一个简单的解析器,首先将数据转换为需要处理的内容。

编辑:

澄清var y = extend({}, x)克隆在集合中循环的当前对象,以避免改变原始对象。这样你就创建了一个全新的集合。acc (accumulator)是一个新的集合,我们在这里推入具有重复属性的克隆对象。