我有一个这样的数组:
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);
然而这不起作用。我做错了什么?
答案 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替换单个项目。
CutRoadArray.splice(CutRoadArray.length - 1, 1 ,newreviewElem);
最后,最后一个参数是实际添加到数组的项目。
答案 4 :(得分:1)
我建议迭代主数组并在嵌套数组中搜索想要的索引。发现后,在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>');
&#13;