我有一个 JSON
对象数组,如下所示:
var data = [
{name: '', age: 12},
{name: 'bcd', age: 15},
{name: 'cdf', age: 13},
{name: '', age: 11},
{name: 'fgh', age: 8},
{name: '', age: 10},
];
使用下划线
我想以应返回的方式 trim 此对象:
[{name: 'bcd', age: 15},
{name: 'cdf', age: 13},
{name: '', age: 11},
{name: 'fgh', age: 8}]
我尝试使用以下代码:
var firstIndex = _.indexOf(data, _.find(data, function(d){ return d.name !== ''; }));
var lastIndex = _.indexOf(data, _.find(data.slice().reverse(), function(d){ return d.name !== ''; }));
console.log(data.slice(firstIndex, lastIndex + 1) );
但我认为,应该有比这更好的方法。
这是JSFiddle
编辑:
我希望 trim 顶部和底部名称为空白的所有数据。但不在数组元素的中间。
与string.Trim()
方法相同。当我对“一二三”文本应用 trim 时,它将删除开头和结尾的空格,但不会删除单词之间的空格。
最佳答案
你的逻辑没问题,就用 _.findLastIndex()
而不是在反转数组上使用 _.findIndex()
:
const data = [
{name: '', age: 7},
{name: '', age: 12},
{name: 'bcd', age: 15},
{name: 'cdf', age: 13},
{name: '', age: 11},
{name: 'fgh', age: 8},
{name: '', age: 10},
{name: '', age: 12},
{name: '', age: 14},
];
function trimArray(predicate, arr) {
const start = _.findIndex(arr, predicate);
const end = _.findLastIndex(arr, predicate);
return arr.slice(start, end + 1);
}
const result = trimArray((o) => o.name !== '', data);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
关于javascript - 下划线JS : trim array of objects based on condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49421537/