【问题标题】:Subset Array by another Array Javascript另一个数组 Javascript 的子集数组
【发布时间】:2011-11-15 06:00:05
【问题描述】:

我是 javascript 新手,任务很简单。我有一个数组“值”和第二个数组“性别”,我想创建第三个数组,它是“值”,其中性别 ==“男性”。变量如下所示:

var values = new Array();
values[0] = .1
values[1] = .3
values [2] = .7
values[3] = .8
var gender = new Array();
gender[0]='Males'
gender[1]='Males'
gender[2]='Females'
gender[3]='Females'

python 中的等效语法是:

female_values = values[gender=='Females']

有什么想法吗?

【问题讨论】:

  • 我不知道你用什么 Python 编程,但在我的版本中,你想要的语法类似于 female_values = [values[i] for i, sex in enumerate(gender) if sex == 'Females']

标签: javascript arrays subset


【解决方案1】:
var values = [.1, .3, .7, .8];
var gender = ['Males', 'Males', 'Females', 'Females'];

var males = [];
for (var i = 0; i < values.length; i++) {
  if (gender[i] == 'Males') {
    males.push(values[i]);
  }
}

Array 构造函数通常不使用,而是使用数组字面量[]。然后简单地遍历数组并将值推送到第三个数组(如果您设置的某些条件通过)。


是的,这比 python 更痛苦,尽管coffee script can make it a little nicer

【讨论】:

  • 太好了,感谢您的回答和一般反馈(我才刚刚开始)。
  • 在小型数组中这并不重要,但您应该将数组的长度缓存在一个临时变量中,这样就不必为每次迭代计算它。
  • 快速相关问题——如果我只想识别一个值,有没有办法在不循环的情况下做到这一点?谢谢。
  • Javscript 几乎不支持任何类型的时髦迭代。因此,无论何时您想要数组中的一个/多个项目并且您不知道索引已经存在,那么您必须循环。没办法。
【解决方案2】:

更好的方式

var values = [.1, .3, .7, .8],
    gender = ['Males', 'Males', 'Females', 'Females'],
    males  = [],
    i      = values.length;

while ( i-- ) {
    gender[i] == 'Males' && males.unshift(values[i])
}

【讨论】:

  • nice 这样的形容词可能非常主观。你的版本可能会稍微快一点,但它的可读性较差,因为它依赖于更多的魔法,尤其是对于 javascript 初学者。此外,结果数组中的项目也将通过这种方法反转。
  • 是的,对不起,结果是相反的。用 unshift 代替了 push。现在应该没事了。
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 2016-12-13
  • 2012-08-29
  • 2010-09-24
  • 1970-01-01
  • 2010-12-10
  • 2013-06-01
相关资源
最近更新 更多