FreeCodeCampJavaScript算法与数据结构基本数据结构

更新时间:2023-06-09 01:21:57 阅读: 评论:0

FreeCodeCampJavaScript算法与数据结构基本数据结构
使⽤数组存储数据集合
这是⼀个⼀维数组(one-dimensional array),它只有⼀层,或者说在它⾥⾯没有包含其它的数组结构。你可以看到它⾥⾯包含了布尔值(booleans)、字符串(strings)、数字(numbers)以及⼀些其他的 JavaScript 语⾔中合法的数据类型:
let simpleArray =['one',2, 'three’,true,fal, undefined,null];
console.log(simpleArray.length);
// 输出 7
你可以在上述例⼦中看到,所有数组都有⼀个长度(length)属性。你可以简单地使⽤Array.length⽅法来访问它。
使⽤push()和unshift()将项⽬添加到数组
数组是可变的。在这⼀挑战中,我们将研究两种可以通过编程⽅式修改数组的⽅法:Array.push()和Array.unshift()。
两种⽅法都将⼀个或多个元素作为参数,并将这些元素添加到调⽤该⽅法的数组中。该push()⽅法将元素添加到数组的末尾,unshift()并将元素添加到开头。考虑以下:
let twentyThree ='XXIII';
let romanNumerals =['XXI','XXII'];
romanNumerals.unshift('XIX','XX');
romanNumerals将具有价值[‘XIX’, ‘XX’, ‘XXI’, ‘XXII’]。
romanNumerals.push(twentyThree);
romanNumerals将具有价值[‘XIX’, ‘XX’, ‘XXI’, ‘XXII’, ‘XXIII’]。注意,我们还可以传递变量,这使我们在动态修改数组数据时具有更⼤的灵活性。
使⽤pop()和shift()从数组中删除项⽬
pop() 删除从阵列的端部的元件,⽽shift()将删除开头的元素。
使⽤splice()删除项⽬
splice()允许我们做到这⼀点:从数组中的任何位置删除任意数量的连续元素。北朝鲜高级卖春女
splice()最多可以包含3个参数,但现在,我们仅关注前两个参数。的前两个参数splice()是整数,它们表⽰splice()被调⽤数组的索引或位置。请记住,数组是零索引的,因此要使⽤表⽰数组的第⼀个元素0。splice()的第⼀个参数表⽰要从中开始删除元素的数组上的索引,⽽第⼆个参数表⽰要删除的元素数。例如:
let array =['today','was','not','so','great'];
array.splice(2,2);
在这⾥,我们从第三个元素(索引2)开始删除2个元素。array将具有价值[‘today’, ‘was’, ‘great’]。
使⽤splice()添加项⽬
您可以使⽤由⼀个或多个元素组成的第三个参数添加到数组中。这对于将⼀个元素或⼀组元素快速切换出另⼀个元素⾮常有⽤。
const numbers =[10,11,12,12,15];
const startIndex =3;
const amountToDelete =1;
numbers.splice(startIndex, amountToDelete,13,14);
console.log(numbers);
的第⼆个条⽬12被删除,我们在相同的索引处添加13和14。该numbers数组现在为[ 10, 11, 12, 13, 14, 15 ]。
在这⾥,我们从数字数组开始。然后,将以下内容传递给splice():从该索引处开始删除元素的索引(3),要删除的元素数(1)和其余参数(13、14)。请注意,后⾯可以有任意多个元素(⽤逗号分隔)amountToDelete,每个元素都将被插⼊。
使⽤slice()复制数组项
我们将介绍的下⼀个⽅法是slice()。⽆需修改数组,⽽是将给定数量的元素slice()复制或提取到新数组中,⽽⽆需修改即可调⽤该数组。slice()仅使⽤2个参数-第⼀个是开始提取的索引,第⼆个是停⽌提取的索引(提取将⼀直进⾏,直到但不包括该索引处的元素)。考虑⼀下:
let weatherConditions =['rain','snow','sleet','hail','clear'];
let todaysWeather = weatherConditions.slice(1,3);
todaysWeather会拥有价值[‘snow’, ‘sleet’],⽽weatherConditions仍然会有[‘rain’, ‘snow’, ‘sleet’, ‘hail’,
‘clear’]。
实际上,我们通过从现有数组中提取元素来创建了⼀个新数组。
使⽤Spread运算符复制阵列
尽管slice()可以让我们在复制数组的哪些元素⽅⾯有选择余地,但还有其他⼀些有⽤的任务,ES6的新扩展运算符使我们可以使⽤简单且易读的语法轻松地依次复制数组的所有元素。传播语法看起来像这样:…
在实践中,我们可以使⽤spread运算符来复制数组,如下所⽰:
let thisArray =[true,true, undefined,fal,null];
let thatArray =[...thisArray];
thatArray等于[true,true, undefined,fal,null]。
thisArray保持不变,并thatArray包含与相同的元素thisArray。
将数组与传播运算符组合
散布运算符的另⼀个巨⼤优势是能够组合数组,或在任何索引处将⼀个数组的所有元素插⼊另⼀个数组的能⼒。使⽤更传统的语法,我们可以连接数组,但这仅允许我们在⼀个数组的结尾和另⼀个数组的开头合并数组。传播语法使以下操作极为简单:
let thisArray =['sage','romary','parsley','thyme'];
let thatArray =['basil','cilantro',...thisArray,'coriander'];
thatArray将具有价值[‘basil’, ‘cilantro’, ‘sage’, ‘romary’, ‘parsley’, ‘thyme’, ‘coriander’]。
使⽤indexOf()检查元素是否存在
由于阵列是可以改变的,或突变的,在任何时候,没有关于在数据的特定部分将是⼀个给定的阵列上的保证,或者,如果该元件甚⾄仍然存在。幸运的是,JavaScript为我们提供了另⼀种内置⽅法,indexOf()它使我们能够快速轻松地检查数组中元素的存在。indexOf()将元素作为参数,并在调⽤时返回该元素的位置或索引,或者-1该元素在数组中不存在。
例如:
let fruits =['apples','pears','oranges','peaches','pears'];
fruits.indexOf('dates');
fruits.indexOf('oranges');
fruits.indexOf('pears');
indexOf(‘dates’)返回-1,indexOf(‘oranges’)返回2和indexOf(‘pears’)返回1(每个元素存在的第⼀个索引)。
indexOf()对于快速检查数组中元素的存在⾮常有⽤。我们定义了⼀个函数,该函数quickCheck采⽤⼀个数组和⼀个元素作为参数。使⽤修改函数,indexOf()以便true如果传递的元素存在于数组中(fal如果不存在)则返回该函数。
function quickCheck(arr, elem){
// Only change code below this line
if(arr.indexOf(elem)>=0){
return true;
}
el return fal;
// Only change code above this line
沥青防水卷材施工}
console.log(quickCheck(['squash','onions','shallots'],'mushrooms'));
使⽤For循环遍历数组的所有项⽬
有时,在使⽤数组时,能够遍历每个项⽬以找到我们可能需要的⼀个或多个元素,或者根据哪些数据项满⾜⼀组特定条件来操纵数组,这⼀点⾮常⽅便。JavaScript的提供了多种内置的⽅法,每个叠代阵列稍微不同的⽅式来实现不同的效果(如every(),forEach(),map(),等),但该技术是最灵活,为我们提供了控制量最⼤的是⼀个简单的for循环。
法律意识淡薄
考虑以下:武汉三步踩
function greaterThanTen(arr){
let newArr =[];
for(let i =0; i < arr.length; i++){
if(arr[i]>10){
newArr.push(arr[i]);
}
}
return newArr;
}
greaterThanTen([2, 12, 8, 14, 80, 0, 1]);
使⽤for循环,此函数遍历并访问数组的每个元素,并将其置于我们创建的简单测试中。这样,我们就可以轻松地以编程⽅式确定哪些数据项⼤于10,并返回[12, 14, 80]包含这些项的新数组。
我们定义了⼀个函数,filteredArray该函数采⽤arr嵌套数组和elem作为参数,并返回⼀个新数组。elem表⽰⼀个元素,该元素可能会或可能不会出现在嵌套在其中的⼀个或多个数组上arr。使⽤for循环修改函数,以返回传递的数组的过滤后的版本,以使嵌套在arrcontains 中的任何数组elem都已删除。
第⼀种
function filteredArray(arr, elem){
let newArr =[];
// Only change code below this line
for(let i=0;i<arr.length;i++)
{
let a=[];
let flag=0;
for(let j=0;j<arr[i].length;j++)
{
if(elem==arr[i][j])
{
flag=1;
break;
}
a.push(arr[i][j]);
十月的缩写}
if(flag==0)
newArr.push(a);
}
// Only change code above this line
return newArr;
}
console.log(filteredArray([[3,2,3],[1,6,3],[3,13,26],[19,3,9]],3));
第⼆种
function filteredArray(arr, elem){
let newArr =[];
// Only change code below this line
for(let i=0;i<arr.length;i++)
{
if(arr[i].indexOf(elem)==-1){
newArr.push(arr[i]);
}
}
// Only change code above this line
return newArr;
}
console.log(filteredArray([[3,2,3],[1,6,3],[3,13,26],[19,3,9]],3));
创建复杂的多维数组
当将数组视为数据结构时,最强⼤的功能之⼀就是数组可以包含甚⾄完全由其他数组组成。我们已经齐心协力近义词
看到了在以前的挑战中包含数组的数组,但是相当简单。但是,数组可以包含⽆限深度的数组,⽽该数组可以包含其他数组,每个数组都有⾃⼰的任意深度级别,依此类推。这样,数组可以很快变成⾮常复杂的数据结构,称为多维数组或嵌套数组。考虑以下⽰例:
let nestedArray =[
['deep'],
[
['deeper'],['deeper']
],
[
[
['deepest'],['deepest']
],
[
[
['deepest-est?']
]
]
]
];
该deep数组嵌套了2层深度。该deeper阵列是3级深。该deepest阵列是4个级别,⽽deepest-est?为5。
尽管此⽰例看起来有些复杂,但是在处理⼤量数据时,这种复杂程度并不是闻所未闻的,甚⾄是不寻常的。但是,我们仍然可以⾮常容易地使⽤⽅括号表⽰法访问这种复杂的数组的最深层:
console.log(nestedArray[2][1][0][0][0]);
这将记录字符串deepest-est?。现在我们知道了该数据的位置,如果需要,我们可以将其重置:
nestedArray[2][1][0][0][0]='deeper still';
console.log(nestedArray[2][1][0][0][0]);
现在它记录了deeper still。
将键值对添加到JavaScript对象
从最基本的⾓度讲,对象只是键值对的集合。换句话说,它们是映射到称为属性(键)的唯⼀标识符的数据(值)。看⼀个例⼦:
const tekkenCharacter ={
player:'Hwoarang',
fightingStyle:'Tae Kwon Doe',
human:true
};
上⾯的代码定义了⼀个名为的Tekken视频游戏⾓⾊对象tekkenCharacter。它具有三个属性,每个属性都映射到⼀个特定值。如果要添加其他属性,例如“ origin”,可以通过分配origin给对象来完成:
这使⽤点表⽰法。如果您要观察该tekkenCharacter对象,则该对象现在将包含该origin属性。霍⽡朗也有明显的橙⾊头发。您可以通过执⾏以下操作以⽅括号符号添加此属性:
tekkenCharacter['hair color']='dyed orange';
如果属性中有空格,或者要使⽤变量来命名属性,则必须使⽤括号表⽰法。在上述情况下,该属性⽤引号括起来以将其表⽰为字符串,并将完全按所⽰添加。如果不带引号,它将被视为⼀个变量,并且属性名称将是该变量的任何值。这是⼀个带有变量的⽰例:
const eyes ='eye color';
tekkenCharacter[eyes]='brown';
添加所有⽰例后,该对象将如下所⽰:
{
player:'Hwoarang',
fightingStyle:'Tae Kwon Doe',
human:true,
origin:'South Korea',
'hair color':'dyed orange',
'eye color':'brown'
};
⼀个foods对象已经有三个项⽬创建的。使⽤您选择的语法,再添加三个条⽬:bananas值为13,grapes值为35以及strawberries的值27。
let foods ={
apples:25,
oranges:32,
plums:28
};
// Only change code below this line
foods.bananas=13;
foods['grapes']=35;
const a='strawberries';
foods[a]=27;
// Only change code above this line
console.log(foods);
修改嵌套在对象中的对象
let nestedObject ={
id:28802695164,
date:'December 31, 2016',
data:{
totalUrs:99,
online:80,
onlineStatus:{
active:67,strcmp
静静坐着
away:13,
busy:8
}
}
};

本文发布于:2023-06-09 01:21:57,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/907156.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数组   元素   属性   添加
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图