[英]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()))
each
第each
將遍歷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>
您需要分別修剪key
和value
。
首先將_.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.