gpt4 book ai didi

javascript - JSON 对象 -> 数组?我应该如何转换它?

转载 作者:行者123 更新时间:2023-12-02 20:16:41 26 4
gpt4 key购买 nike

拿两个:)我有一个 jquery 的自动完成文本框,单击按钮后,我需要检查输入的值是否来自自动完成,还是一个全新的值。

问题在于“缓存”是某种 JSON 对象数组,但能够使用 if ( input in cache ) { ... } 我需要将它转换为一个简单的 JavaScript 数组。最好的方法是什么?

附注FireBug 说“cache=[object Object]”

//////////////////////////////////////////// autocomplete code //////////////////
var cache = {},
lastXhr;
$( "#inputV" ).autocomplete({
minLength: 2,
source: function( request, response ) {
var term = request.term;
if ( term in cache ) {
response( cache[ term ] );
return;
}

lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
cache[ term ] = data;
if ( xhr === lastXhr ) {
response( data );
}
});
}
});


////////////////////////// check if input comes from autocomplete //////////////////
$('#btn_check').click(function() {

var input = $("#inputV").val();
alert(input);

console.log('cache='+cache);
/// FireBug says 'cache=[object Object]'

if ( input in cache )
{
alert("yes");
}
else
{
alert("no");
}
});

响应如下所示。

[
{
"id": "Podiceps nigricollis",
"label": "Black-necked Grebe",
"value": "Black-necked Grebe"
},
{
"id": "Nycticorax nycticorax",
"label": "Black-crowned Night Heron",
"value": "Black-crowned Night Heron"
},
{
"id": "Tetrao tetrix",
"label": "Black Grouse",
"value": "Black Grouse"
},
{
"id": "Limosa limosa",
"label": "Black-tailed Godwit",
"value": "Black-tailed Godwit"
},
{
"id": "Chlidonias niger",
"label": "Black Tern",
"value": "Black Tern"
},
{
"id": "Larus marinus",
"label": "Great Black-backed Gull",
"value": "Great Black-backed Gull"
},
{
"id": "Larus fuscus",
"label": "Lesser Black-backed Gull",
"value": "Lesser Black-backed Gull"
},
{
"id": "Larus ridibundus",
"label": "Black-headed Gull",
"value": "Black-headed Gull"
},
{
"id": "Turdus merula",
"label": "Common Blackbird",
"value": "Common Blackbird"
},
{
"id": "Sylvia atricapilla",
"label": "Blackcap",
"value": "Blackcap"
},
{
"id": "Rissa tridactyla",
"label": "Black-legged Kittiwake",
"value": "Black-legged Kittiwake"
},
{
"id": "Aegypius monachus",
"label": "Eurasian Black Vulture",
"value": "Eurasian Black Vulture"
}
]

最佳答案

(替换答案,我并不是说最后一个是 CW。)

The problems is that 'cache' is some sort of an array of JSON objects

实际上,它不是一个数组。它是一个物体。 (它是通过 var cache = {}; 创建的,这就是我们可以判断的方式。)

...but to be able to use if ( input in cache ) { ... } I need to convert it to a simple javascript array.

事实上,没有。此上下文中的 in 运算符测试对象是否包含具有您指定名称的属性。示例:

var obj = {foo: 1};  // An object with a property called "foo"
alert('foo' in obj); // alerts true, `obj` has a "foo" property
alert('bar' in obj); // alerts false, there is no "bar" property in `obj`

请注意,in 运算符的左侧必须是字符串(它可以是文字,如上所述,也可以是生成字符串的任何表达式,例如变量引用) .

click 处理程序中的代码正在获取“inputV”字段的值,并查看该值是否是 cache 对象中的属性名称。

您可能想检查它是否是 cache 对象的属性之一的。如果是这样:

$('#btn_check').click(function()        {

var input = $("#inputV").val();
var found, propName;

alert(input);

console.log('cache='+cache);
/// FireBug says 'cache=[object Object]'

found = false;
for (propName in cache ) {
if (cache[propName] == input) {
found = true;
break;
}
}
alert(found);
});

由于我们知道 cache 是一个无聊的旧对象(事实上它是用 var cache = {}; 创建的),因此我们可以非常安全地使用原始 >for..in 循环如上。但如果您想更加小心,您可以使用 hasOwnProperty 来确保您只检查 cache 拥有自己副本的属性(而不是它继承的属性)它的原型(prototype)):

    for (propName in cache ) {
if (cache.hasOwnProperty(propName) && cache[propName] == input) {
found = true;
break;
}
}

不过,在这种情况下,这并不是真正必要的,因为我们知道 cache 是一个普通对象,并且禁止有人做一些非常愚蠢的事情,例如扩展 Object.prototype > (这是你不应该做的),它的所有可枚举属性(for..in 枚举的东西)都是它自己的属性。

关于javascript - JSON 对象 -> 数组?我应该如何转换它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6186144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com