javascript - 过滤 Javascript 数组并仅返回具有填充键的对象

标签 javascript arrays

我已经在这里搜索了几个小时,但到目前为止还没有找到正确的答案。如果答案已经存在,我深表歉意。

我正在尝试过滤数组并仅返回具有特定键和任意值的对象。值是什么并不重要,只要该键不为空或 null 即可。

数组示例:

[
  {
    "title": "Song 1",
    "author": "Joe",
    "Album1": 2,
    "Album2": null,
    "Album3": 5
  },
  {
    "title": "Song 2",
    "author": "Jane",
    "Album1": null,
    "Album2": null,
    "Album3": 8
  },
  {
    "title": "Song 3",
    "author": "Steve",
    "Album1": 10,
    "Album2": 1,
    "Album3": null
  }
]

我只想返回在 Album1 中具有值的对象(该值将是轨道编号)。我不在乎值是多少,只要有值就行。所以在这个例子中,只将以下内容返回到一个新数组中:

[
  {
    "title": "Song 1",
    "author": "Joe",
    "Album1": 2,
    "Album2": null,
    "Album3": 5
  },
  {
    "title": "Song 3",
    "author": "Steve",
    "Album1": 10,
    "Album2": null,
    "Album3": null
  }
]

我尝试了几种不同的方法,但都失败了。这是一个看起来应该起作用但不起作用的方法:

getFilteredSongs (array, album) {
  return songs
    .filter(function (obj) {
      return Object.keys(album).every(function (a) {
        return obj[a] === true
      })
    })
  }

getFilteredSongs(songsList, Album1)

我非常感谢任何帮助以及对我的绿色技能和无法找到应该在那里的问题的耐心。

最佳答案

您需要做的就是返回 Album1 属性 - 如果 null,结果数组将不会包含在结果中:

const songs = [
  {
    "title": "Song 1",
    "author": "Joe",
    "Album1": 2,
    "Album2": null,
    "Album3": 5
  },
  {
    "title": "Song 2",
    "author": "Jane",
    "Album1": null,
    "Album2": null,
    "Album3": 8
  },
  {
    "title": "Song 3",
    "author": "Steve",
    "Album1": 10,
    "Album2": 1,
    "Album3": null
  }
];

const filtered = songs.filter(({ Album1 }) => Album1);
console.log(filtered);

或者,如果您愿意,无需解构:

const filtered = songs.filter(song => song.Album1);

或者,如果您使用 Album1string 键调用 getFilteredSongs:

const songs = [
  {
    "title": "Song 1",
    "author": "Joe",
    "Album1": 2,
    "Album2": null,
    "Album3": 5
  },
  {
    "title": "Song 2",
    "author": "Jane",
    "Album1": null,
    "Album2": null,
    "Album3": 8
  },
  {
    "title": "Song 3",
    "author": "Steve",
    "Album1": 10,
    "Album2": 1,
    "Album3": null
  }
];
const getFilteredSongs = (songs, album) => songs.filter(song => song[album]);
console.log(getFilteredSongs(songs, 'Album1'));

关于javascript - 过滤 Javascript 数组并仅返回具有填充键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975487/

相关文章:

php - 使用 Javascript 和 php 添加动态文本字段

java - 分析数字

javascript - 如何使用 Cucumber 测试用 javascript 加载的内容

javascript - selectbox 多个而不被选中

arrays - 将 float32array 保存到 node.js 磁盘的紧凑方法是什么?

java - 将文本文件读取到数组 Java

php - 在我的数组中使用 INSERT INTO 的正确方法

c# - 将数组中的所有元素初始化为 NaN 的最快方法是什么?

javascript - 在 jQuery 中用 html 标记替换特定字符

c# - <script>...</script> 在转发器控制代码中未显示在页面呈现的源代码中