如何获取嵌套元素的值
2023-04-29
99
我试图在 js 中做得更好,但在尝试解决这个问题时我遇到了困难,“使用 for 循环,返回传递数组的过滤版本,这样任何嵌套在包含 elem 的 arr 中的数组都已被删除。”
function filteredArray(arr, elem) {
let newArr = [];
// Only change code below this line
for (let j=0;j<arr.length;j++){
newArr.push(arr[j])
}
for(let i=0; i<newArr.length; i++){
for (let k=0; k<newArr[i].length; k++){
if (newArr[i][k] === elem){
newArr.splice(i,1)
}
}
}
// Only change code above this line
return newArr;
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
上面的代码是我到目前为止编写的。我得到了一个错误;
for (let k=0; k<newArr[i].length; k++){
TypeError: Cannot read properties of undefined (reading 'length') "
你们能帮我吗,我该如何修复代码?
编辑:代码应该返回 []
3个回答
-
由于您要调用
Array.prototype.splice
函数,因此您必须反向循环。 - 其次,找到数字后,中断内循环。
function filteredArray(arr, elem) {
let newArr = [];
// Only change code below this line
for (let j=0;j<arr.length;j++){
newArr.push(arr[j])
}
for(let i = newArr.length - 1; i >= 0; i--){
for (let k=0; k < newArr[i].length; k++){
if (newArr[i][k] === elem){
newArr.splice(i,1);
break;
}
}
}
// Only change code above this line
return newArr;
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
Ele
2023-04-29
在这里,我以相反的顺序迭代
newArr
数组,并以相反的顺序迭代嵌套数组。这确保使用 splice 方法从数组中删除元素不会导致循环跳过元素或访问未定义的值。
function filteredArray(arr, elem) {
let newArr = [];
for (let j = 0; j < arr.length; j++) {
newArr.push(arr[j]);
}
for (let i = 0; i < newArr.length; i++) {
if (Array.isArray(newArr[i])) {
for (let k = 0; k < newArr[i].length; k++) {
if (newArr[i][k] === elem) {
newArr.splice(i, 1);
i--;
break;
}
}
}
}
return newArr;
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)); // should return []
Saket Agarwal
2023-04-29
您应该尽可能利用 JavaScript 解释器提供的函数和高级函数。有许多此类函数可对数组等集合进行操作。
其中一个函数: Array.prototype.filter 。
根据两个条件进行过滤:
-
测试
arr
的元素是否为数组(即 Array.prototype.isArray ) -
测试元素是否等于
elem
(即 Array.prototype.includes - 此答案假设elem
是原始类型(请参阅下面的注释))
let filteredArray = (arr, elem) => {
let result = []
for ( inner of arr ) {
if ( !( Array.isArray(inner) && inner.includes(elem)) )
result.push(inner)
}
return result
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9] ], 3));
注意: Array.prototype.includes 使用相等性进行测试,并且对象是引用,因此它们的“值”不等于原始值。示例:
let x = [ 1 ]
let y = [ 1 ]
let val = [ [ 1 ], y ]
console.log(val.includes(x))
console.log(val.includes(y))
Tibrogargan
2023-04-29