用Javascript中的另一项替换数组中的一项

Replacing an item in an array with another item in Javascript

本文关键字:一项 数组 替换 Javascript      更新时间:2023-09-26

我有一个这样的数组:

  var CutRoadArray = [
            ['Location', '_Location'],
            ['Applicant Info', '_ApplicantInfo'],
            ['Details', '_ApplicationDetails'],
            ['Bond Info', '_BondInfo'],
            ['Attachments', '_Attachments'],
            ['Review', '_ReviewA']
        ];

我正在尝试用不同的条目替换最后一项。

到目前为止,我的代码如下:
                var newreviewElem = ['Review', '_ReviewB'];
                var index = CutRoadArray.lastIndexOf('_ReviewA');
                CutRoadArray.splice(index, 0, newreviewElem);
                console.log(CutRoadArray);

然而,这不起作用。我做错了什么?

https://jsfiddle.net/yygLdo0o/

你的回答其实有两点不对。

首先,您需要获取正确的索引。如果要替换最后一项,只需获取array.length.

第二,你需要指出你要替换的数目:

CutRoadArray.splice(CutRoadArray.length - 1, 1, newreviewElem);

splice中的第二个参数应该是1,而不是0。

这将替换任意大小数组的最后一个元素,因为它不依赖于数组中的项位于特定位置或特定索引。

CutRoadArray.length - 1正在获取数组中的项数,但由于splice使用基于零的索引,因此必须减去1以获得数组中最后一项的索引。

第二个参数(下面用粗体显示)告诉splice替换单个项。

关于拼接的文档

CutRoadArray.splice (CutRoadArray。length - 1, 1, newreviewElem);

最后一个参数是实际要添加到数组中的项。

工作小提琴

应该是:

CutRoadArray.splice(index, 1, newreviewElem);

第二个参数表示需要替换多少项

您的

CutRoadArray.lastIndexOf('_ReviewA');

当然不会找到任何东西,因为CutRoadArray包含数组,而不是字符串。

for(var iter = 0; iter < CutRoadArray.length; iter++) {
  if (CutRoadArray[iter][1] == '_ReviewA') {
    CutRoadArray[iter] = newreviewElem;
    break;
  }
}

如果你想替换元素,使用

CutRoadArray.splice(index, 1, newreviewElem);

splice的第二个参数是deleteCount, 0表示不删除任何项。

你的代码的另一个问题是
CutRoadArray.lastIndexOf('_ReviewA');

将始终返回-1,因为CutRoadArray是一个数组的数组,这意味着它的每个元素都是一个数组,它没有一个元素是'_ReviewA'。(这是CutRoadArray的一个元素)

我建议遍历主数组并在嵌套数组中搜索所需的索引。找到后,很容易替换索引处的嵌套数组,如array[index] = replace;。如果没有找到,则将数组推到末尾。

function replace(array, find, replace) {
    var index;
    if (array.some(function (a, i) {
            if (~a.indexOf(find)) {
                index = i;
                return true;
            }
        })
    ) {
        array[index] = replace;
    } else {
        array.push(replace);
    }
}
var cutRoadArray = [
      ['Location', '_Location'],
      ['Applicant Info', '_ApplicantInfo'],
      ['Details', '_ApplicationDetails'],
      ['Bond Info', '_BondInfo'],
      ['Attachments', '_Attachments'],
      ['Review', '_ReviewA']
];
replace(cutRoadArray, '_ReviewA', ['Review', '_ReviewB']);
document.write('<pre>' + JSON.stringify(cutRoadArray, 0, 4) + '</pre>');