javascript - 下划线JS : trim array of objects based on condition

标签 javascript arrays json filter underscore.js

我有一个 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/

相关文章:

javascript - JQuery Click 函数只工作一次

c - 由于算法检查超出数组而导致的 C 运行时错误

json - 在 Quarkus 的 REST Web 服务中返回 JSON 时出现 LazyInitializationException

javascript - 将多个对象传递给 angularjs $resource.save()

javascript - 尝试向此工具提示添加额外的字符串,但不知道如何添加行空间

Php 从 URL 获取哈希值

PHP foreach 替换数组内的值

c - 返回 C 中数组中包含特定值的所有索引位置

java - 如何使用 Jackson 以自定义方式实例化 bean?

javascript - NodeJS 日期监听器然后回调