循环遍历对象并更改所有值

时间:2016-04-07 05:25:28

标签: javascript

我无法循环访问对象并将所有值更改为其他值,假设我想将所有值更改为字符串“redacted”。我需要能够在纯JavaScript中执行此操作。

例如,我有一个像这样的对象......

spy = {
id: 007,
name: "James Bond",
age: 31
};

并且......之后对象看起来像这样......

spy = {
id: "redacted",
name: "redacted",
age: "redacted"
};

这是我必须从

开始的
var superSecret = function(spy){
  // Code Here
}

这不应该创建一个新的间谍对象,而是更新它。

8 个答案:

答案 0 :(得分:18)

 generateNotification(String alertMessage)

答案 1 :(得分:7)

您也可以使用。

使用Object.keys更好,因为您只会遍历对象属性,而不是原型链。

Object.keys(spy).reduce((acc, key) => {acc[key] = 'redacted'; return acc; }, {})

答案 2 :(得分:2)

一个不错的解决方案是结合使用Object.keysreduce-不会改变原始对象;

var superSecret = function(spy){
  return Object.keys(spy).reduce(
    (attrs, key) => ({
      ...attrs,
      [key]: 'redacted',
    }),
    {}
  );
}

答案 3 :(得分:2)

此版本更简单:

  Object.keys(spy).forEach(key => {
    spy[key] = "redacted");
  });

答案 4 :(得分:1)

There was 1 failure:

1) ExampleTest::testBasicExample
A request to [http://localhost/test] failed. Received status code [404].

答案 5 :(得分:0)

我写了一个小助手函数,它遍历一个对象并对每个条目应用回调:

iterateEntries(node, fn) {
    const newNode = {};
    Object.entries(node).forEach(([key, val]) => (newNode[key] = fn(val)));
    return newNode;
}

用法:

iterateEntries(yourObject, (entry) => {
  return entry; // do something with entry here
});

答案 6 :(得分:-1)

使用代理:

function superSecret(spy) {
  return new Proxy(spy, { get() { return "redacted"; } });
}

> superSecret(spy).id
< "redacted"

答案 7 :(得分:-1)


let dataArray = [
            {
                total: 112,
                tax: 51,
                key:0,
            },
            {
                total: 58,
                tax: 53,
                key:0,
            }
        ];

dataArray.map((data, i) => {
   dataArray[i].key = data.total - data.tax;
});

console.log(dataArray);