Underscorejs - 更改 JSON 数组中的值

Underscorejs - change values in JSON array

我有一组来自服务器的 json 个对象:

var a = [
{id:1,name:"Piano",class:"Instrument"},
{id:2,name:"Guitar",class:"null"},
{id:3,name:"null",class:"null"},.....]

使用 underscorejs,是否可以循环遍历这些对象并用空字符串 "" 更改每个键中的每个 "null" 值?

使用 _.each()* 方法遍历集合及其对象,并将等于 "null" 的值替换为空字符串。 所以逻辑与您使用嵌套循环遍历二维数组的逻辑相同。

* 我不建议在这里使用 _.map() 因为这种方法会产生新的修改数组,我不知道你是否需要这个,但如果你愿意,你也可以使用 _.each(obj) 在映射函数中。

var arr,
    searchVal,
    replaceVal;

arr = [
  {id: 1, name: "Piano", class: "Instrument"},
  {id: 2, name: "Guitar", class: "null"},
  {id: 3, name: "null", class: "null"}
];

searchVal = "null";
replaceVal = "";

_.each(arr, function(obj) {
  _.each(obj, function(value, key) {
    if(value === searchVal) {
      obj[key] = replaceVal;
    }
  });
});

console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>

无需在从 JSON 字符串解析后遍历所有数据,您只需为 JSON.parse 创建自定义解析器即可节省时间。

function customParser(key, value) {
    if (value.name === 'null') {
        value.name = '';
    }
  
    if (value.class === 'null') {
        value.class = '';
    }

    return value;
}

var jsonText = '[{"id":1,"name":"Piano","class":"Instrument"},{"id":2,"name":"Guitar","class":"null"},{"id":3,"name":"null","class":"null"}]',
    a = JSON.parse(jsonText, customParser);

document.body.appendChild(document.createTextNode(JSON.stringify(a)));