javascript – 将项目添加到数组或替换它,如果它具有相同的ID
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 将项目添加到数组或替换它,如果它具有相同的ID,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2217字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 将项目添加到数组或替换它,如果它具有相同的ID](/upload/InfoBanner/zyjiaocheng/782/4b93ed20c83d4416a9bedc6fd6a908cd.jpg)
我有这个对象数组
var source = [
{id: 1, label: "one"},
{id: 2, label: "two"},
{id: 3, label: "three"}
];
如果它具有相同的ID,我需要添加一个项目或替换它
var new_sub = {id: 1, label: "new label for one"};
var new_add = {id: 4, label: "four"};
source = myFunc(new_sub);
source = myFunc(new_add);
function myFunc(obj) {
return (source.findIndex(x => x.id === obj.id) === -1) ?
source.concat(obj) : source.map((item) => {
return (item.id === obj.id) ? obj : item;
});
}
这段代码完美无缺,但还有更好的方法吗?
你可以检查我的代码到这个snippit:
var source = [
{id: 1, label: "one"},
{id: 2, label: "two"},
{id: 3, label: "three"}
];
var new_sub = {id: 1, label: "new label for one"};
var new_add = {id: 4, label: "four"};
source = myFunc(new_sub);
source = myFunc(new_add);
function myFunc(obj) {
return (source.findIndex(x => x.id === obj.id) === -1) ?
source.concat(obj) : source.map((item) => {
return (item.id === obj.id) ? obj : item;
});
}
//PRINT
var html = "";
source.map((item) => {
html += "<li>" + item.id + " - " + item.label + "</li>";
});
$("#resp").html(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="resp">
</ul>
解决方法:
你正在对数组进行多次传递(一个在findIndex中,然后一个在concat或map中),这是不必要的.只需一次通过即可:
function myFunc(a, obj) {
let found = false;
const result = a.map(e => {
if (!found && e.id === obj.id) {
found = true;
return obj;
} else {
return e;
}
});
if (!found) {
result.push(obj);
}
return result;
}
请注意,我将源数组作为参数传递给函数,因此它没有副作用.
var source = [
{id: 1, label: "one"},
{id: 2, label: "two"},
{id: 3, label: "three"}
];
var new_sub = {id: 1, label: "new label for one"};
var new_add = {id: 4, label: "four"};
source = myFunc(source, new_sub);
source = myFunc(source, new_add);
console.log(source);
function myFunc(a, obj) {
let found = false;
const result = a.map(e => {
if (!found && e.id === obj.id) {
found = true;
return obj;
} else {
return e;
}
});
if (!found) {
result.push(obj);
}
return result;
}
当然,如果阵列很小并且您知道这是标准情况,那么它并不重要.
如果你想简明扼要地(在我看来)滥用操作符:
function myFunc(a, obj) {
let found = false;
const result = a.map(e => e.id === obj.id ? (found = true, obj) : e);
if (!found) {
result.push(obj);
}
return result;
}
内容总结
以上是互联网集市为您收集整理的javascript – 将项目添加到数组或替换它,如果它具有相同的ID全部内容,希望文章能够帮你解决javascript – 将项目添加到数组或替换它,如果它具有相同的ID所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。