繁体   English   中英

lodash-如何_.trim对象数组?

[英]lodash - How to _.trim an array of objects?

我正在尝试使用lodash的_.trim删除键/值中的前导/尾随空格,如下所示:

var items = [
             {"key": "  Needs Trim 1  ", "value": "  Needs Trim 2  "},
             {"key": "  Needs Trim 3  ", "value": " Needs Trim 4  "}
            ];

用lodash修剪后看起来应该像这样:

var items = [
             {"key": "Needs Trim 1", "value": "Needs Trim 2"},
             {"key": "Needs Trim 3", "value": "Needs Trim 4"}
            ];

我尝试了这个:

var trimmedItems = _.map(items, _.trim);
console.log(trimmedItems); // outputs ["[object Object]", "[object Object]"]

但是我不认为这console.log(trimmedItems) ,因为console.log(trimmedItems)不会显示实际的对象,所以我不确定它们是否被修剪。 这是显示问题的小提琴 ,应该也打开控制台以查看问题。

知道如何使小提琴输出修剪的lodash对象以确保正确修剪吗?

您可以按如下方式使用each()

_.each(items, o => _.each(o, (v, k) => o[k] = v.trim()))

eacheach将遍历items数组,而嵌套的each将遍历数组中对象的属性。 更新items数组中的原始值

o[k] = v.trim()

用来。 o引用items数组内的对象。

对于不支持ES6箭头功能的环境

_.each(items, function (o) {
    _.each(o, function (v, k) {
        o[k] = v.trim();
    });
});

 var items = [{ "key": " Needs Trim 1 ", "value": " Needs Trim 2 " }, { "key": " Needs Trim 3 ", "value": " Needs Trim 4 " }]; _.each(items, o => _.each(o, (v, k) => o[k] = v.trim())) console.log(items); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash-compat/3.10.2/lodash.js"></script> 

使用香草JavaScript:

items.forEach(function(o) {
    Object.keys(o).forEach(function(key) {
        o[key] = typeof o[key] === 'string' ? o[key].trim() : o[key];
    });
});

 var items = [{ "key": " Needs Trim 1 ", "value": " Needs Trim 2 " }, { "key": " Needs Trim 3 ", "value": " Needs Trim 4 " }]; items.forEach(function (o) { Object.keys(o).forEach(function (key) { o[key] = typeof o[key] === 'string' ? o[key].trim() : o[key]; }); }); console.log(items); 

您需要两个级别的映射。 一个用于映射数组,一个内部用于将对象的每个属性映射到其值的修剪版本:

_.map(items, function (obj) {
  return _.fromPairs(_.map(obj, function (value, key) {
    return [key, _.trim(value)]
  }))
})

映射是解决此问题的正确方法,但是我的解决方案比meagar的解决方案更合适

 const items = [ { key1: " Needs Trim 1 " , key2: " Needs Trim 2 " }, { key1: " Needs Trim 3 " , key2: " Needs Trim 4 " } ]; const result = _.map(items, toTrimmedObject); console.log(JSON.stringify(result, null, 2)); function toTrimmedObject(obj) { return _.mapValues(obj, _.trim); } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

您需要分别修剪keyvalue

首先将_.trim()应用于对象,将其天真地转换为字符串,生成"[object Object]" ,然后修剪此字符串。


另外,无需使用lodash,因为JavaScript已原生提供了所有必需的功能:

 var items = [{ "key": " Needs Trim 1 ", "value": " Needs Trim 2 " }, { "key": " Needs Trim 3 ", "value": " Needs Trim 4 " }]; var out = items.map(function(item) { item.key = item.key.trim(); item.value = item.value.trim(); return item; }); console.log(out); 

修剪+删除对象(包括嵌套对象)中所有值的空白。 跳过非字符串值和未定义的值。

const trimObject = (obj) => {
  each(obj, (v, k) => {
    if (v !== undefined) {
      if (isObject(v)) {
        obj[k] = trimObject(v)
      } else {
        obj[k] = typeof v === 'string' ? v.trim().replace(/\s+/g, ' ') : v
      }
    }
  })
  return obj
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM