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

时间:2015-08-25 16:59:12

标签: javascript jquery arrays

我有一个这样的数组:

  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/

5 个答案:

答案 0 :(得分:1)

如果要替换元素,请使用

CutRoadArray.splice(index, 1, newreviewElem);

splice is the deleteCount的第二个参数,0表示不会删除任何项目。

您的代码的另一个问题是

CutRoadArray.lastIndexOf('_ReviewA');

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

答案 1 :(得分:1)

应该是:

CutRoadArray.splice(index, 1, newreviewElem);

第二个参数表示应该替换多少项。

答案 2 :(得分:1)

import org.apache.spark.sql.cassandra.CassandraSQLContext
val sc: SparkContext = ...
val cc = new CassandraSQLContext(sc)
val rdd: SchemaRDD = cc.sql("SELECT user_id AS id, <other columns> from testspark.user WHERE ...")
当然,

将找不到任何内容,因为CutRoadArray.lastIndexOf('_ReviewA'); 包含数组,而不是字符串。

CutRoadArray

答案 3 :(得分:1)

你的回答实际上有两个问题。

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

第二个是你需要指出你要替换的数量:

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

拼接中的第二个参数应为1,而不是0。

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

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

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

Documentation about splice

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

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

Working fiddle

答案 4 :(得分:1)

我建议迭代主数组并在嵌套数组中搜索想要的索引。发现后,在array[index] = replace;之类的索引处替换嵌套数组很简单。如果未找到,则将数组推送到最后。

&#13;
&#13;
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>');
&#13;
&#13;
&#13;