提取对象的属性,然后将其拼接到另一个对象中
Extracting an object's properties, then splicing it into another object?
我对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)是一个新的集合,我们在这里推入具有重复属性的克隆对象。
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 提取对象的属性,然后将其拼接到另一个对象中