有没有一种方法可以通过对象的键来获取值


el: "#app",
data: {
songs : { 
songNames: [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}],
}
songCheck: ['byebye'],
foundSong: new Audio (" "),

你好,我想得到";mp3/03.mp3";通过用songCheck Array项进行检查并将返回的";mp3/03.mp3";到这样的变量:

foundSong: new Audio ("mp3/03.mp3 "), 

然后

this.foundSong.play();

请帮帮我。谢谢

虽然我不理解你想要的一切,但也许这个片段可以帮助你解决问题:

const songNames = [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}];
// 1. Key you are looking for
const searchKey = "byebye";
// 2. Find object we are looking for
// - .find loops over all songNames objects
// - for each object we check if it has property we are looking for i.e. "byebye"
// - first object that match criteria is returned or undefined if there are no matches
const searchResult = songNames.find(song => song.hasOwnProperty(searchKey));
// 3. Get desired value from object
console.log(searchResult && searchResult[searchKey]); // will return "mp3/03.mp3" in our case where searchKey is "byebye"

这并不漂亮,但我想到了以下内容:

var data = {
songs : { 
songNames: [
{holiday:'mp3/01.mp3'}, 
{loveme:'mp3/02.mp3'}, 
{byebye:'mp3/03.mp3'}
]
},
songCheck: ['byebye'],
foundSong: ""
};
for (var i = 0; i < data.songs.songNames.length; i++)
{
console.log(data.songs.songNames[i]);
if (data.songs.songNames[i][data.songCheck[0]] != undefined)
{
data.foundSong = data.songs.songNames[i][data.songCheck[0]];
break;
}
}
console.log(data.foundSong);

我没有Audio对象,所以我不能使用它,但这是一个小的更改。

实际上,我的建议是,如果你有权限/访问权限,或者能够说服那些有权限的人,稍微改变一下数据结构。给songNames对象一个不同的结构,就像一个实际的对象。

{
name: "holiday",
filename: "mp3/01.mp3"
}

然后将songCheck还原为一个简单的字符串。执行这两个建议可以消除一些额外的复杂性,而且你不必依赖奇怪的行为,这更像是一种黑客行为。在这种情况下,使用对象键时检查undefined值是不好的。例如,如果有人想稍后更改数据结构,那么无论如何,您都必须稍后更改此代码,而且当发生这种情况时,将更难找到此代码。

进一步思考这个问题,在您的原始代码中,按照您的方式进行操作可能是有意义的,但在为这个问题进行精简时,这是没有意义的,所以我想对此建议持保留态度。

顺便说一句,在上面的代码中,你应该做一些空检查,我已经忽略了。

最新更新