按字段名称在新的 JS 过滤数组中移动 JS 数组行

Posted

技术标签:

【中文标题】按字段名称在新的 JS 过滤数组中移动 JS 数组行【英文标题】:Move JS arrays rows in a new JS filtered array by field name 【发布时间】:2018-06-01 17:10:42 【问题描述】:

我有一个json格式的JS数组,比如这个:

一旦用户将看到所有行,就有一个选项可以仅按特定顺序过滤特定字段。我可以过滤这些字段,但我现在正尝试让它们也按特定顺序重新排序。

例如,用户按特定顺序选择了这三个字段,请查看右侧列表:

我只想按特定顺序过滤掉这三列:

开放时间

开启方式

exdoorid

我现在有什么选择,我怎样才能只将这些特定的行推送到一个新数组中,以便稍后用作过滤数组?

【问题讨论】:

【参考方案1】:

您可以run through your array 并在其中检查属性名称是否在您的字段列表中。您将所需内容添加到一个对象中,然后将其推送到您的列表中。

var arr = [
   opentime: 'opentime1', openingmode: 'openingmode1', extdoorid: 'extdoorid1', automaticchangestableid: 'acsid1', extdoorid: 'edid1',
  opentime: 'opentime2', openingmode: 'openingmode2', extdoorid: 'extdoorid2', automaticchangestableid: 'acsid2', extdoorid: 'edid2',
  opentime: 'opentime3', openingmode: 'openingmode3', extdoorid: 'extdoorid3', automaticchangestableid: 'acsid3', extdoorid: 'edid3'
  ];
var fieldList = [ 'automaticchangestableid',  'opentime', 'extdoorid'];
var newArr = [];

angular.forEach(arr, function(value, index) 
  var obj = ;
  angular.forEach(fieldList, function(field, fieldIndex)
      obj[field] = value[field];
  );
  newArr.push(obj);
);

console.log(newArr);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

【讨论】:

谢谢,这与我需要的非常接近,但你认为我们可以稍微重新调整一下吗,因为例如,如果将 openingmode 设置为表中的第一项,opentime 设置为第二项,则数组仍然以原始顺序显示它们i.gyazo.com/7c4f69900a42019569417b1d7fdd25c5.png你怎么看?谢谢 抱歉,现已修复。 :) 谢谢。差不多了。你知道为什么在内部循环结束时数组默认按字母顺序排序吗? 按字母顺序排序?它将按照您插入的方式进行排序。如果先插入openingmode,再插入extdoorid,就会是openingmode: x, extdoorid: y 出于某种奇怪的原因,它会将数组更改为按字母顺序排序,然后再将它们推送到真正的数组 i.gyazo.com/bf1feaaee22a86f2387ae193b4477733.png 尽管在 foreach 循环期间它循环正常

以上是关于按字段名称在新的 JS 过滤数组中移动 JS 数组行的主要内容,如果未能解决你的问题,请参考以下文章

React JS:按字符串过滤数组

使用 Mongoose.js 按嵌套数组中的字段排序

JS过滤数组在对象数组的对象属性中

Django Queryset 按确切字符串过滤数组字段

js过滤数组中都为空的对象几种方式

js中filter过滤用法总结