如何从JavaScript对象中移除函数

4
在我的应用程序中,我正在使用angular.js。 我需要通过PUT请求发送一个有三个属性的对象,就像这样:
var item = {
  a: 1,
  b: 2,
  c: 3
}

但是,当我执行console.log(item)时,它会显示很多我不需要的信息,比如$delete$get等。就像这样:

 {  
   ...
   $delete: function (params, success, error),
   $get: function (params, success, error),
   ...
   a: 1,
   b: 2,
   c: 3
}

我认为这是因为它是一个JavaScript Promise或者其他类似的东西。
有没有办法只获取abc?也许可以使用lodash库来实现?


我的解决方案:

我使用了lodash,代码如下:

 var valuesToPick = ['title', 'languageCode', 'jobTitle', 'location','economySegment', 'companyDescription' ...];

 var item = _.pick( vm.form, valuesToPick );

看起来你正在将数据放在 $resource$http 对象上,你尝试过将数据放在一个新对象上,例如: var item = {}; item.a = 1; 等。 - Patrick Evans
我有很多属性,这只是一个例子,实际上还有更多,我相信有20个,我不想重复20次:D。 - Baumannzone
1
我会将您的解决方案添加为实际答案,然后标记为正确答案,以供未来的SO用户参考。 - Chris
我已经完成了。这是你需要的。 - Baumannzone
4个回答

3

普通JavaScript

var objectFunctionLess=JSON.parse(JSON.stringify(objectWithFunctions))

2

它们继承自Object,而不是由item所拥有。

如果您想迭代自己的属性,请使用for...in循环。

for (property in item) {
    item[property];
}

它循环遍历对象周围的所有函数、属性和其他所有内容。最终我选择了 lodash_.pick,但还是谢谢你。我学到了一些东西。 - Baumannzone

1
我使用了 lodash_.pick,如下所示:

 var valuesToPick = ['title', 'languageCode', 'jobTitle', 'location','economySegment', 'companyDescription' ...];

 var item = _.pick( vm.form, valuesToPick );

项目现在不再包含功能,只有您的信息。


0

这不是一个完美的解决方案,但它应该可以工作:

而不是:

submitFunction(object, function () {})

做这个:

submitFunction(JSON.parse(angular.toJson(object)), function () {})

你可以将它分割成:

var cleanObject = JSON.parse(angular.toJson(object))
submitFunction(cleanObject, function () {})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接