查找元素【全部】位置

题目描述

在数组 arr 中,查找值与 item 相等的元素出现的所有位置

第一种::filter过滤每一个元素,找到相同则执行push,最后返回存放下标数组
function findAllOccurrences(arr, target) {
    var m = [];
    arr.filter(function(ele,idx,arr){
        return target === ele && m.push(idx);  //前一个为true向下执行。
    });
    
    return m;
}

第二种::运用reduce的第二个参数初始化reduce回调函数的第一个参数为数组。
reduce返回一个新的数组
function findAllOccurrences(arr, target) {
    var m = arr.reduce(function(allIdx,ele,idx,arr){
        ele === target && allIdx.push(idx);
        return allIdx;
    },[]);
    return m;
}

第三种::还是运用reduce
function findAllOccurrences(arr, target) {
    var m = arr.reduce(function(allIdx,ele,idx,arr){
        ele !== target || allIdx.push(idx);    //当第一个为false才向下执行push,如果为true不向下执行push
        return allIdx;
    },[]);
    return m;
}

第四种::for循环遍历比较每个元素,相同则下标放入新数组
function findAllOccurrences(arr, target) {
    var m = [];
    for (var i = 0; i < arr.length ; i++) {
        if(arr[i] === target){
            m.push(i);
        }
    }
    return m;
}
第五种::lastIndexOf()从数组逆序进行查找,然后删除倒着数的那个元素,不改变删除的元素前边的元素下标。
然后继续逆序进行查找。
function findAllOccurrences(arr, target) {
    var m = [];
    var index = arr.lastIndexOf(target);
    while(index > -1){
        m.push(index);
        arr.splice(index,1);   // arr=arr.slice(0,index);【复制元素不改变原下标】
        index = arr.lastIndexOf(target);
    }
    
    return m;
}

第六种::如果第五种使用indexOf那么数组正序查找的时候会改变数组原来元素的下标。
当用indexOf可以使用它的第二个参数fromIndex从哪里开始查找。这样就不会给原数组造成影响。
function findAllOccurrences(arr, target) {
    var m = [];
    var index = arr.indexOf(target);
    while(index > -1){
        m.push(index);
        index = arr.indexOf(target,index + 1);
    }
    return m;
}

### MATLAB 中读取 Excel 文件并查找非空单元格的方法 在 MATLAB 中,`xlsread` 函数用于从 Excel 文件中读取数据。为了到 Excel 表中的非空单元格,可以结合逻辑运算符和条件判断来实现这一目标。 以下是具体方法: #### 使用 `xlsread` 读取 Excel 数据 通过调用 `xlsread` 函数可以从指定路径的 Excel 文件中提取数值型数据、字符型数据以及原始数据矩阵。例如: ```matlab filename = 'example.xlsx'; % 定义文件名 sheet = 1; % 定义工作表编号 data = xlsread(filename, sheet); % 读取整个工作表的数据到变量 data 中 ``` #### 判断非空单元格 MATLAB 提供了多种方式检测数组或矩阵中的非空元素。假设已将 Excel 的内容存储至变量 `data` 中,则可通过以下代码定位非空单元格的位置: ```matlab % 出非空单元格位置 nonEmptyCells = ~cellfun(@isempty, data); % 获取行号和列号 [rowIdx, colIdx] = find(nonEmptyCells); ``` 这里利用了 `cellfun` 和匿名函数 `@isempty` 来逐个检查矩阵内的每个元胞是否为空[^1]。如果某个元胞不为空,则返回 true;反之则 false。最终得到布尔矩阵 `nonEmptyCells` 后再借助 `find` 命令获取具体的行列索引值。 另外一种更简洁的方式是直接作用于导入后的二维数组形式(当仅存在数值时),如下所示: ```matlab numericData = xlsread(filename, sheet); % 只读取数值部分 nonZeroElements = numericData ~= 0; [rowNums, colNums] = find(numericData); ``` 此段脚本适用于纯数字类型的表格区域筛选[^2]。 注意:实际应用过程中可能遇到混合类型的情况(即既有文字又有数字)。此时推荐先采用通用模式读入全部资料作为 cell array 处理后再区分对待不同类型字段。 #### 总结 综上所述,在 MATLAB 环境下完成针对特定 Excel 文档内有效记录坐标的检索任务并不复杂,只需合理运用内置工具箱所提供的功能即可达成目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值