Javascript lodash-如何修剪一组对象?

Javascript lodash-如何修剪一组对象?,javascript,lodash,Javascript,Lodash,我试图使用lodash的ux.trim删除键/值中的前导/尾随空格,如下所示: var items = [ {"key": " Needs Trim 1 ", "value": " Needs Trim 2 "}, {"key": " Needs Trim 3 ", "value": " Needs Trim 4 "} ]; 用lodash修整后的外观应如下所示: var items = [

我试图使用lodash的ux.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.logtrimmedItems没有显示实际的对象,所以我不确定它们是否被修剪过。下面是一个显示问题的示例,控制台也应该打开以查看问题

您知道如何让小提琴输出修剪过的lodash对象以确保它们被正确修剪吗?

您需要分别修剪关键帧和值

将u.trim应用于对象首先会将对象转换为字符串,生成[object object],然后修剪该字符串

此外,无需使用lodash,因为JavaScript已经在本地提供了所有必要的功能:

可变项目=[{ 关键:需要修剪1, 值:需要修剪2 }, { 关键:需要修剪3, 值:需要修剪4 }]; var out=items.mapfunctionitem{ item.key=item.key.trim; item.value=item.value.trim; 退货项目; }; 控制台。注销 您需要分别修剪关键点和值

将u.trim应用于对象首先会将对象转换为字符串,生成[object object],然后修剪该字符串

此外,无需使用lodash,因为JavaScript已经在本地提供了所有必要的功能:

可变项目=[{ 关键:需要修剪1, 值:需要修剪2 }, { 关键:需要修剪3, 值:需要修剪4 }]; var out=items.mapfunctionitem{ item.key=item.key.trim; item.value=item.value.trim; 退货项目; };
控制台。注销 您需要两个级别的映射。一个用于映射数组,一个用于将对象的每个属性映射到其值的修剪版本的内部属性:

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

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

_.map(items, function (obj) {
  return _.fromPairs(_.map(obj, function (value, key) {
    return [key, _.trim(value)]
  }))
})
您可以按如下方式使用每一个

_.each(items, o => _.each(o, (v, k) => o[k] = v.trim()))
第一个遍历items数组,嵌套的遍历数组中对象的属性。更新项目数组中的原始值

使用。其中o引用的是items数组中的对象

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

_.each(items, function (o) {
    _.each(o, function (v, k) {
        o[k] = v.trim();
    });
});
可变项目=[{ 关键:需要修剪1, 值:需要修剪2 }, { 关键:需要修剪3, 值:需要修剪4 }]; _.eachitems,o=>..eacho,v,k=>o[k]=v.trim console.logitems; 您可以按如下方式使用每一个

_.each(items, o => _.each(o, (v, k) => o[k] = v.trim()))
第一个遍历items数组,嵌套的遍历数组中对象的属性。更新项目数组中的原始值

使用。其中o引用的是items数组中的对象

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

_.each(items, function (o) {
    _.each(o, function (v, k) {
        o[k] = v.trim();
    });
});
可变项目=[{ 关键:需要修剪1, 值:需要修剪2 }, { 关键:需要修剪3, 值:需要修剪4 }]; _.eachitems,o=>..eacho,v,k=>o[k]=v.trim console.logitems;
修剪+删除对象(包括嵌套对象)中所有值的空白。跳过非字符串值和未定义的值

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
}

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

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
}

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

常数项=[ { 关键1:需要修剪1 ,键2:需要修剪2 }, { 关键1:需要修剪3 ,键2:需要修剪4 } ]; const result=u.mapitems,toTrimmedObject; console.logJSON.stringifyresult,null,2; 函数toTrimmedObjectobj{ 返回u.mapValuesobj,u.trim; }
映射是正确的方法,但我的解决方案比meagar的更合适

常数项=[ { 关键1:需要修剪1 ,键2:需要修剪2 }, { 关键1:需要修剪3 ,键2:需要修剪4 } ]; const result=u.mapitems,toTrimmedObject; console.logJSON.stringifyresult,null,2; 函数toTrimmedObjectobj{ 返回u.mapValuesobj,u.trim; }
虽然这适用于OP提供的代码,但如果数组中的对象具有不同的键,则它将不起作用。i、 e.这不是灵活/动态的。@Tushar True,但问题没有说明需要或需要这种额外的灵活性。尽管这种灵活性在未来可能会很有用,但它也可能导致同样多的问题。比如说,在某个时刻,一个新的数值属性将被添加到对象中-默认情况下将其转换为字符串是否一定是件好事?尽管这对OP提供的代码有效,但如果数组中的对象具有不同的键,它将不起作用。i、 e.这不是灵活/动态的。@Tushar True,但问题没有说明需要或需要这种额外的灵活性。尽管这种灵活性在未来可能很有用, 它可能会引起同样多的问题。比如说,一个新的数值属性将在某个时刻添加到对象中-默认情况下将其转换为字符串是否一定是一件好事?