O código abaixo vem do preenchimento automático da interface do usuário do jQuery:
var projects = [
{
value: "jquery",
label: "jQuery",
desc: "the write less, do more, JavaScript library",
icon: "jquery_32x32.png"
},
{
value: "jquery-ui",
label: "jQuery UI",
desc: "the official user interface library for jQuery",
icon: "jqueryui_32x32.png"
},
{
value: "sizzlejs",
label: "Sizzle JS",
desc: "a pure-JavaScript CSS selector engine",
icon: "sizzlejs_32x32.png"
}
];
Por exemplo, eu quero alterar o valor desc de jquery-ui . Como eu posso fazer isso?
Além disso, existe uma maneira mais rápida de obter os dados? Quero dizer, dar ao objeto um nome para buscar seus dados, assim como o objeto dentro de uma matriz? Então seria algo comojquery-ui.jquery-ui.desc = ....
javascript
jquery
arrays
qinHaiXiang
fonte
fonte
projects["jquery-ui"].desc
. Isso valeria a pena o esforço apenas para obter uma sintaxe melhor?Respostas:
Você deve procurar na matriz como:
e use-o como
ATUALIZAR:
Para obter mais rápido:
(De acordo com o comentário de Frédéric, você não deve usar hífen na chave do objeto ou usar "jquery-ui" e notação de projetos ["jquery-ui"].)
fonte
-
no nome do objeto. Você teria que escrever"jquery-ui": {}
e,projects["jquery-ui"].desc
respectivamente.É bem simples
findIndex
métodoyourArray[indexThatyouFind]
fonte
()
nofindIndex
método?[...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], myArray.slice(objIndex + 1))]
[...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], ...myArray.slice(objIndex + 1))]
? Acho que você está perdendo as segundas elipses.ES6 , sem alterar os dados originais.
fonte
A melhor solução, graças ao ES6.
Isso retorna uma nova matriz com uma descrição substituída para o objeto que contém um valor igual a "jquery-ui".
fonte
Você pode usar $ .each () para percorrer a matriz e localizar o objeto em que está interessado:
fonte
Usar o mapa é a melhor solução sem o uso de bibliotecas extras. (Usando o ES6)
fonte
É facilmente possível com a biblioteca de sublinhado / lodash:
Documentos:
https://lodash.com/docs#find
https://lodash.com/docs#merge
fonte
.value()
você pode usar .find então no seu exemplo
fonte
você precisa conhecer o índice do objeto que está mudando. então é bem simples
fonte
Acho que assim é melhor
fonte
findIndex
você está atribuindo um valor em vez de comparardados os seguintes dados, queremos substituir as frutas da
summerFruits
lista por melancia .Duas maneiras de fazer isso.
Primeira abordagem:
Segunda abordagem: usando
map
espread
:summerFruitsCopy
Agora a lista retornará uma matriz com o objeto atualizado.fonte
fonte
...
antes que os projetos sejam necessários?...
é conhecido como o operador de propagação. Google it :)Esta é outra resposta envolvente
find
. Isso se baseia no fato de quefind
:Aqui está o trecho crítico do Javascript:
Aqui está uma versão alternativa do mesmo Javascript:
Aqui está uma versão ainda mais curta (e um pouco mais maligna):
Aqui está uma versão de trabalho completa:
fonte
Você pode usar a função de mapa -
fonte
Experimente este código. ele usa a função grep do jQuery
fonte
Também podemos usar a função de mapa da matriz para modificar o objeto de uma matriz usando Javascript.
fonte
Encontre o índice primeiro:
Então:
Em seguida, faça o que você deseja com este índice, como:
$ scope [returnindex] .someKey = "someValue";
Nota: por favor, não use for, pois para irá verificar todos os documentos da matriz, use enquanto estiver com uma rolha, para que pare assim que for encontrado, portanto, um código mais rápido.
fonte
Aqui eu estou usando js angulares. Em javascript, você pode usar o loop for para encontrar.
fonte
para atualizar vários itens com as correspondências, use:
fonte
Esta é a minha resposta ao problema. Minha versão de sublinhado era 1.7, portanto, eu não poderia usar
.findIndex
.Então, eu peguei manualmente o índice do item e o substituí. Aqui está o código para o mesmo.
O método abaixo substituirá o aluno
id:4
por mais atributos no objeto}
Com o sublinhado 1.8, será simplificado, pois temos métodos
_.findIndexOf
.fonte
Você deseja atualizar o valor de
array[2] = "data"
fonte
fonte