Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提取对象';属性,然后将其拼接到另一个对象中?_Javascript_Angularjs_Oop - Fatal编程技术网

Javascript 提取对象';属性,然后将其拼接到另一个对象中?

Javascript 提取对象';属性,然后将其拼接到另一个对象中?,javascript,angularjs,oop,Javascript,Angularjs,Oop,我对JS的世界还很陌生,我试着把我的头绕在对象上 为了了解一下上下文,我在这里的最终实验如下:我有一个表,它显示从csv收集的数据。这很有效!现在,下一个挑战是复制此表的现有列。事情很快就分崩离析了 我意识到我需要做的第一件事是提取我要复制的表的“列”。当然,当我说column时,我指的是“属性”(恰好显示为column) 好的,下面是一个不起作用的for循环: var namelist = [CSV Data]; // assume it's loaded var templist = [];

我对JS的世界还很陌生,我试着把我的头绕在对象上

为了了解一下上下文,我在这里的最终实验如下:我有一个表,它显示从csv收集的数据。这很有效!现在,下一个挑战是复制此表的现有列。事情很快就分崩离析了

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

好的,下面是一个不起作用的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]);
};
在我注入复制品后,它可能会如下所示:

[
  {
    "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",
  }
]
我期待着你的想法!多谢各位


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

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

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中的所有大写字母都是用于标识常量的约定。当你有数字时,确保你有数字,而不是字符串。这样做的目的是尽可能从源代码中完善数据,这样就不必在前端处理数据。如果数据已经被搞乱了,请考虑建立一个简单的解析器,首先将数据转换成需要使用的数据。 编辑:


要澄清
var y=extend({},x)
克隆集合中循环的当前对象,以避免更改原始对象。通过这种方式,您可以创建一个全新的系列
acc
(累加器)是一个新的集合,我们在其中推送具有重复属性的克隆对象。

这不是一个嵌套对象,而是一个集合(对象数组)。尝试查看
map
filter
reduce
?为什么所有东西都是大写的?如果需要大写字母,请在CSS中使用
文本转换
,不要硬编码到代码中。@elclanrs,就像数据库本身发送CSV的方式一样。值得小写吗?@jovian,我现在在打电话,但我认为那不管用。控制台指示键是i的属性,因此它变为0:Bob Smith。。。我怀疑添加的内容只会使其成为0:Name:Bob SmithOK bro,这简直让我大吃一惊。我学得很快,但我得承认我对这个很陌生。像extend({},x)。。。发生什么事?我认为你在这里所做的可能很精彩,但为了真正吸收它,以便我可以更灵活地使用这种方法,我想了解更多的细节。你们介意用更明确的评论来编辑这篇文章吗?当然可以像解释我是五种类型的人一样来解释?谢谢请参阅我的编辑。希望有帮助。只需要知道对象始终是引用,如果要从旧对象中删除新对象,则需要克隆它们。为什么
.reduce()
.map()
非常适合这种情况。@package:是的,你说得对,我改为使用map。这很有效!我仔细看了一下代码,起初没有意识到你自己做了扩展函数,这让我很困惑,因为我认为已经有一个object.extend函数了?
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);