我有一个名为MyUsernames的2d数组。
如果我写console.log(MyUsernames),我会看到以下内容:
0: {id: "5", name: "quirky.subdued"}
1: {id: "6", name: "phyllida.skeg"}
2: {id: "7", name: "duff.anarchist"}
3: {id: "9", name: "relashio.articulate"}我正在尝试访问数组中元素的name部分。
我通过这个循环输出MyUsernames中的记录:
var hst = document.getElementById("usernames");
for (var i = 0; i < MyUsernames.length; i++) {
var un1 = MyUsernames[i].name;
hst.innerHTML += "<li>" +"<a id="+MyUsernames[i].id + " href='#content' onclick='deleteById(this)'>" + un1 + "</a></li>";
}这是代码的deleteById位:
var deleteById = function ( self ){
this_id = self.id;
this_word = MyUsernames[this_id].name;
}我的问题是,我正在发送例如9的ID值来提取名称relashio.articulate。
但是,我试图通过以下代码来访问该代码:
this_word = MyUsernames[this_id].name;这不起作用,因为根据控制台输出,在我的示例中我想要的位是通过以下方式进行访问:
MyUsernames[3].name;而不是:
MyUsernames[9].name;问题是我不能发送ID值为3,因为我只有来自MyUsernames的记录的ID值,即9。
是否有一种方法可以通过数组的相应ID访问数组的“名称”部分?
发布于 2020-10-17 08:11:30
我想你是在找Array.prototype.find。您可以在函数中提供一组条件,如果条件匹配,find将返回一个结果。
你就这样用它
var usernames = [];
usernames.push({id: "5", name: "quirky.subdued"});
usernames.push({id: "6", name: "phyllida.skeg"});
usernames.push({id: "7", name: "duff.anarchist"});
usernames.push({id: "9", name: "relashio.articulate"});
function findUsername(id) {
var username = usernames.find(function(username) { return username.id === id });
return username;
}
var user5 = findUsername("5");
document.write('Find result 1: ' + user5.name);
document.write('<br />');
var user9 = findUsername("9");
document.write('Find result 2: ' + user9.name);这里我的JsFiddle:https://jsfiddle.net/rtL87veq/11/
发布于 2020-10-17 08:10:35
将数组转换为对象
通过实现用户Id作为新对象变量的主键,您将能够通过users[9].name找到用户
输出:
relashio.articulate定义新的对象变量并执行for循环,确保将用户id标记为主键。然后,用相同的键保存其余的对象数据。例如:
var users = {};
// for loop all your users in 'array'
for (var i = 0; i < MyUsernames.length; i++) {
// hold found user in variable
var user = MyUsernames[i];
// mark user id as the primary key then save rest of object data in same key
users[user.id] = user;
};源代码
var MyUsernames = [{
id: "5",
name: "quirky.subdued"
}, {
id: "6",
name: "phyllida.skeg"
}, {
id: "7",
name: "duff.anarchist"
}, {
id: "9",
name: "relashio.articulate"
}];
// define object variable
var users = {};
// for loop all your users in 'array'
for (var i = 0; i < MyUsernames.length; i++) {
// hold found user in variable
var user = MyUsernames[i];
// mark user id as the key then save rest of object data in same key
users[user.id] = user;
};
// Print the value of key 'name' for user id '9'
console.log(users[9].name)
发布于 2020-10-17 08:00:41
Array.find O(n)是一个选项,通过内部道具搜索数组。
const usernames = [{
id: "5",
name: "quirky.subdued"
}, {
id: "6",
name: "phyllida.skeg"
}, {
id: "7",
name: "duff.anarchist"
}, {
id: "9",
name: "relashio.articulate"
}]
const target = usernames.find(({ id }) => id === "9")
console.log(target)
Internet Explorer中不支持它。如果目标浏览器是Array.filter,请考虑使用IE9+
const usernames = [{
id: "5",
name: "quirky.subdued"
}, {
id: "6",
name: "phyllida.skeg"
}, {
id: "7",
name: "duff.anarchist"
}, {
id: "9",
name: "relashio.articulate"
}]
const [target] = usernames.filter(({ id }) => id === "9")
// Filter returns an array of matches. Destructing helps to get the first match
console.log(target)
https://stackoverflow.com/questions/64400144
复制相似问题