首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对于在所有迭代中最终为true的每个条件,将计数器值推入一个新数组中。

对于在所有迭代中最终为true的每个条件,将计数器值推入一个新数组中。
EN

Stack Overflow用户
提问于 2018-06-12 13:29:10
回答 3查看 57关注 0票数 2

我有多个数组,但其中一些数组的值为0或未定义。我想要做的是,每次条件为时,将counter值推到一个新数组中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let array1 = [5, 6, 44, 2, 6];
let array2 = ['', '', '', 5 , 7];

我做到了这一点,但它只返回了唯一的值。这意味着,假设上面有这两个数组,第一个数组具有所有的值- array1,第二个数组不是- array2 (索引0、1、2为空,但索引3和4有其编号值)。下面的函数返回--> [1, 2]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
empNum = (data) => {
let activeArr = [];
let activeOnes = 0;
    for (let i=0; i<data.length; i++) {
        if (active[i] !== 0 && active[i] !== '') {
            activeOnes ++;
            activeArr.push(activeOnes);
        }

    }
    return activeArr;  // [1, 2 ] < -- This is not what I need.
}

在前三次运行中,只有一个数组通过了条件1、1、1,但是在第4和第5次运行时,两个数组都通过了测试,因此接下来的两个条目应该是2,2。

所以,我想要实现的是这样一个新的数组-- [1, 1, 1, 2, 2]

注意:数组的数目不是两个。还有许多其他的,都是相同长度的,它们的数量(数组的数字)可以随着时间的推移而增长,以及每个单独的条目中的条目数,但是到最后,它们都将具有相同的长度。

也许是其他类型的循环?有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-12 13:35:39

我认为在这里最好的做法是在测试了两个数组的真实性之后,将这两个数组合并成一个数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let array1 = [5, 6, 44, 2, 6];
let array2 = ['', '', '', 5 , 7];

const result = array1.map((item1, i) => {
  const item2 = array2[i];
  return Boolean(item1) + Boolean(item2); // gets converted to number
});
console.log(result);

当然,这是假设数组有相同数量的元素。如果没有,您可以首先对两个数组的长度使用Math.max

如果有多个数组,首先将它们放在一个数组中,然后遍历该数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const arrs = [
  [5, 6, 44, 2, 6],
  ['', '', '', 5 , 7],
];
const { length } = arrs[0];
const result = Array.from(
  { length },
  (_, i) => arrs.reduce((a, arr) => a + Boolean(arr[i]), 0)
);
console.log(result);

或者您可能更喜欢只访问每个子数组一次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const arrs = [
  [5, 6, 44, 2, 6],
  ['', '', '', 5 , 7],
];
const { length } = arrs[0];
const result = [];
arrs.forEach(arr =>
  arr.forEach((item, i) => result[i] = (result[i] || 0) + Boolean(item))
);
console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2018-06-14 13:55:20

一种方法可以是为每个要计数的位置创建一个新的数组。这使得计算原始数组中每个位置的真实值的数量变得很容易。

使用lodash的zip是相当简单的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const array1 = [5, 6, 44, 2, 6];
const array2 = ['', '', '', 5 , 7];
const array3 = [1, '', 0, 1, false]

const zipped = _.zip(array1, array2, array3);

// `zipped` should now look like this, where each element
// is an array that represents all of the elements a given
// position from all of the original arrays.
// [
//     [5, "", 1],
//     [6, "", ""],
//     [44, "", 0],
//     [2, 5, 1],
//     [6, 7, false],
// ]

const results = _.map(zipped, (array) => {
    // lodash doesn't seem to have a `count`, but it does have `countBy`
    const counts = _.countBy(array, (element) => new Boolean(element));

    // Here `counts` will be an object showing how many items in the array were `true` and how many were `false`.
    // For example, in the first iteration, it will look like `{ "false": 1, "true": 2 }`

    // So, only return the count that is `true`.
    return counts['true'];    
});

// Here, the results is:
// [2, 1, 1, 3, 2]

如果您想运行这个脚本并查看结果,可以在https://runkit.com/amiel/5b22dffb85fb2d00128e2217上找到它。

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 14:36:43

@Ray,假设两个数组的长度相同,那么下面的代码将按照您的意愿工作。

在这里,使用三值运算符(条件运算符) ?:和两个逻辑运算符&&||0''以及undefinednull都发挥了很大的roles.The代码的作用。

http://rextester.com/HYR69124网上试一试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// empNum() is a function which takes 2 arrays of same length as parameters
var empNum = (data1, data2) => {
    var activeArr = [];

    for (var i=0; i<data1.length; i++) {
        activeArr.push(data1[i] && data2[i] ? 2 : 1); // Using ternary operator ?:
    }
    return activeArr; 
}

// Test 1
var array1= [5, 6, 44, 2, 6];
var array2 = ['', '', '', 5, 7];
console.log(empNum(array1, array2)); //[ 1, 1, 1, 2, 2 ]

// Test 2
console.log(empNum([5, 0, 44, 2, 6], [8, 7, undefined, 5, 7,] )); // [ 2, 1, 1, 2, 2 ]

// Test 3
console.log(empNum(["JavaScript", 0, undefined, null, 6], [8, 7, undefined, 5, 7,] )); // [ 2, 1, 1, 1, 2 ]


// Test 4
console.log(empNum([0, 0, 44, 2, "Python"], [8, 7, undefined, 5, 7,] )); // [ 1, 1, 1, 2, 2 ]

产出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ 1, 1, 1, 2, 2 ]
[ 2, 1, 1, 2, 2 ]
[ 2, 1, 1, 1, 2 ]
[ 1, 1, 1, 2, 2 ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50826088

复制
相关文章
怎么在a_bool的值为True的条件拼接a和a_1?
前几天在Python钻石群有个叫【有点意思】的粉丝问了一道关于pandas中字符串拼接问题,如下图所示。
前端皮皮
2022/08/17
6310
怎么在a_bool的值为True的条件拼接a和a_1?
将数组中多个对象的同名属性值取出合并成新数组
业务中需求的方法,接口返回一个数组,里面包含了大量的对象,具有同名的属性名,比较常见。但是需要将其中参数为name的属性值全部取出,合并成数组。
子舒
2023/08/23
5110
性能计数器在.NET Core中的新玩法
传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于PerformanceCounter类型的性能计数API在.NET Core下被彻底放弃。但是.NET Core程序的很多核心性能指标都会采用事件的方式发出来,具体使用的就是如下所示的这个名为RuntimeEventSource的内部类型。源代码可以从这里查看。
蒋金楠
2020/04/08
1.1K0
性能计数器在.NET Core中的新玩法
2021-03-07:在一个数组中,对于每个数num,求有多少个后
2021-03-07:在一个数组中,对于每个数num,求有多少个后面的数 * 2 依然<num,求总个数。比如:3,1,7,0,2,3的后面有:1,0;1的后面有:0;7的后面有:0,2;0的后面没有;2的后面没有;所以总共有5个。
福大大架构师每日一题
2021/03/07
3910
2021-03-07:在一个数组中,对于每个数num,求有多少个后
C++11新特性:迭代数组中的元素
之前在写c++的时候,我们想要依次迭代数组之中的元素,只能是用for循环来实现。当我学到python的时候,感受到了直接迭代元素的便捷性,真的是高呼Python真香哈哈哈哈。现在发现,原来C++11里也添加了这样一个新的功能,真的很棒!
灯珑LoGin
2022/10/31
7470
2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成
2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再 给定 一个整数 num,表示画匠的数量,每个画匠只能画连在一起的画作。所有的画家 并行工作,请 返回完成所有的画作需要的最少时间。【举例】arr=3,1,4,num=2。最好的分配方式为第一个画匠画 3 和 1,所需时间为 4。第二个画匠画 4,所需时间 为 4。 因为并行工作,所以最少时间为 4。如果分配方式为第一个画匠画 3,所需时 间为 3。第二个画 匠画 1 和 4,所需的时间为 5。那么最少时间为 5,显然没有第一 种分配方式好。所以返回 4。arr=1,1,1,4,3,num=3。最好的分配方式为第一个画匠画前三个 1,所需时间为 3。第二个画匠画 4,所需时间 为 4。 第三个画匠画 3,所需时间为 3。返回 4。
福大大架构师每日一题
2021/05/04
1.1K0
2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成
2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最
2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。
福大大架构师每日一题
2022/05/06
1.6K0
golang刷leetcode: 在每个树行中找最大值
3,深度优先遍历:深度优先一般是递归解,每次递归的时候记录当前访问的深度,递归过程中对相同深度的取最大值。
golangLeetcode
2022/08/02
6640
较快速在一个数组中查找最大值和最小值
#include<stdio.h> #define MAX 100001 int a[MAX]; int n; /* 时间复杂度为3*n/2 */ void swap(int i) { if(i==n-1) return ; if(a[i]>a[i+1]) { int temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } void sort() { int i; for(i=0;i<n;i++) { swap(i); i++; }
chain
2018/08/02
3.6K0
LeetCode44|在每个树行中找最大值
队列的使用,队列的特点是先进先出,这也是日常生活很常见的一种的场景,购物,进站等场景吧,计算机里面队列的使用也是很常见的,比如打开计算机时,机器是如何运转的,优先级队列的运用却大有其奥妙之处,这就是队列的场景
码农王同学
2020/08/25
6210
LeetCode44|在每个树行中找最大值
VBA代码:将整个工作簿中的所有公式转换为值
有趣的是,不管工作簿中有多少张表,它都是用一个操作来处理的。通常情况下,都是试图通过遍历工作表来做到这一点,然而并没有那么有效。
fanjy
2023/10/10
1.3K0
VBA代码:将整个工作簿中的所有公式转换为值
将所有对象存到数据库中在Shop.m中
如果将字典或数组直接存储在数据库中,会将数组或字典转化成字符串,所以可以使用归档与反归档的方法将数据进行编码和解码成二进制数据进行存储,而在数据库中需要使用blob类型存储二进制数据。
hrscy
2018/08/30
1.4K0
MySQL中的case when中对于NULL值判断的小坑
今天在开发程序中,从MySQL中提取数据的时候,使用到了case when的语法用来做判断,在使用过程中在判断NULL值的时候遇到个小问题;
SEian.G
2021/10/22
3.1K0
面试算法,在绝对值排序数组中快速查找满足条件的元素配对
一个含有多个元素的数组,有多种排序方式。它可以升序排列,可以降序排列,也可以像我们以前章节说过的,以波浪形方式排序,现在我们要看到的一种是绝对值排序。对于数组A,绝对值排序满足以下条件:|A[i]| < |A[j]|,只要i < j。例如下面的数组就是绝对值排序: A:-49, 75, 103, -147, 164,-197,-238,314,348,-422 给定一个整数k,请你从数组中找出两个元素下标i,j,使得A[i]+A[j] == k。如果不存在这样的元素配对,你返回(-1,-1)。 对于这个题目
望月从良
2018/07/19
4.4K0
在javascript中对于this指向的再次理解
总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子
Theone67
2019/11/21
1.3K0
Excel公式练习45: 从矩阵数组中返回满足条件的所有组合数
导语:继续研究来自于excelxor.com的案例。这个案例很复杂,但解决方案却很精彩,值得好好研究。建议结合本文参阅原文,会有更大的收获。
fanjy
2020/03/12
3.3K0
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
2022-12-22:给定一个数字n,代表数组的长度,给定一个数字m,代表数组每个位置都可以在1~m之间选择数字,所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。返回达标数组的数量。1 <= n <= 500,1 <= m <= 10,500 10 10 * 10,结果对998244353取模,实现的时候没有取模的逻辑,因为非重点。来自微众银行。答案2022-12-22:参考最长递增子序列。代码用rust编写。代码如下:use std::iter::repeat;fn main() {
福大大架构师每日一题
2022/12/22
2.1K0
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
较快速在一个数组中查找最大值和最小值(2)
/*分治法*/ #include<iostream> #include<string> #include<vector> #include<fstream> using namespace std; int a[16]={1,3,5,7,9,11,14,2,4,6,8,10,12,14,16,18}; int b[9]={3,1,5,9,4,2,7,6,10}; int t[2]; vector<string> splitEx(const string& src, string separate_chara
chain
2018/08/02
2.5K0
判断某个值是否在多维关联数组中 返回该值的所在的关联数组
public function deep_in_array($value, $array) { foreach($array as $item) { if(!is_array($item)) { if ($item == $value) { return $item; } else { continue; } } i
OwenZhang
2021/12/08
5.2K0
必会算法:在旋转有序的数组中找最小值
start=4,nums[start]=8 start=8,nums[end]=3 mid=6,nums[mid]=1
你好戴先生
2022/12/06
2.3K0
必会算法:在旋转有序的数组中找最小值

相似问题

PHP:将数组元素推入每个元素的新数组中

43

对于数组的所有条目,Postgres JSONB日期条件为true

118

将布尔数组中的所有值设置为true

40

将数组对象值推入新数组

26

基于true或false将值推入数组

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文