我有一個看起來像這樣的物件資料:
我有一個看起來像這樣的物件資料。
{
"Meta Data"/span>: {
"1.資訊"。"日內(5分鐘)開盤、最高、最低、收盤價格和成交量"。
"2.符號"。"IBM"。
"3. 最后一次重繪 "。"2021-09-09 18:05:00"。
"4. Interval": "5min",
"5.輸出尺寸"。"緊湊型"。
"6. 時區": "美國/東部"。
},
"時間序列(5min)": {
"2021-09-09 18:05:00": {
"1. open": "137.8300",
"2.高": "137.8300",
"3. low": "137.8300",
"4. close": "137.8300",
"5. volume": "104".
},
"2021-09-09 17:25:00"/span>: {
"1. open": "137.7500",
"2.高點": "137.7500",
"3. low": "137.7500",
"4. close": "137.7500",
"5. volume": "478".
},
"2021-09-09 16:30:00"/span>: {
"1. open": "137.8000",
"2.高": "137.8000",
"3. low": "137.8000",
"4. close": "137.8000",
"5. volume": "459"。
},
}
}
這是我的函式:
這是我的函式。
const myfunction=()=> {
var newArray = [] [].
var newObject={}。
var firstobj = myobject['時間序列(5min)']
for (var key in firstobj) {
console.log(key)。
newObject.x = key.substr(11, 19)
newObject.y = myobject['Time Series (5min)'][`${key}`][`4. close']
newArray.push(newObject)
}
return newArray
}
console.log(myfunction())。
JS物件的創建與for/in多次回傳同一物件到陣列。我不知道為什么我看不到這個錯誤,或者我哪里做錯了。有沒有人知道我應該如何將物件回傳到newArray,以便它創建一個{x: 1234, y: 1234}。(只是示例數字,見本視圖代碼/控制臺所附圖片一起。控制臺的第一部分是記錄鍵的結束,控制臺的第二部分是記錄物件陣列的開始,[{x: 1234, y: 1234}, {x: 1234, y: 1234}] 我想回傳!
結果需要是
結果需要是:
[{ x: '15:50:00', y: '138.3550' },
{ x: '15:55:00', y: '134.3250' }] 。
不是:
[{ x: '15:50:00', y: '138.3550' },
{ x: '15:50:00', y: '138.3550' }] 。
PS:我已經將結構作為一個陣列回傳,但不是作為一個物件陣列。我只是想說,我對API的呼叫是正確的,只是可能沒有正確參考它。
PPS:如果有更簡單的方法,請讓我知道你會怎么做!
uj5u.com熱心網友回復:
你將你的newArray推滿對同一物件的參考。
const obj = { x: 0, y: 0 }。
const newArray = [obj];
obj.x = 1;
newArray.push(obj)。
//由于索引0和1指的是同一個物件,它們現在將 "都 "是。
//{ x: 1, y: 0 }
因此,與其使用一個單一的物件,不如創建一個副本,然后更新屬性:
for (var key in firstobj) {
console.log(key)。
const copy = { ...newObject }; //創建一個淺層拷貝。
//設定x和y不會更新newObject,推送到的物件也不會更新。
//newArray是不同的物件。
copy.x = key.substr(11, 19)
copy.y = myobject['Time Series (5min)'][`${key}`]['4. close']
newArray.push(copy)
}
uj5u.com熱心網友回復:
你可以不創建一個新的變數來臨時存盤值,而是把它完全放在push本身中,像這樣:
array.push({x: data_x, y: data_y})
下面是完整的作業代碼:
。const data = {
"Meta Data"/span>: {
"1.資訊"。"日內(5分鐘)開盤價、最高價、最低價、收盤價和成交量"。
"2.符號"。"IBM"。
"3. 最后一次重繪 "。"2021-09-09 18:05:00"。
"4. Interval": "5min",
"5.輸出尺寸"。"緊湊型"。
"6. 時區": "美國/東部"。
},
"時間序列(5min)": {
"2021-09-09 18:05:00": {
"1. open": "137.8300",
"2.高": "137.8300",
"3. low": "137.8300",
"4. close": "137.8300",
"5. volume": "104".
},
"2021-09-09 17:25:00"/span>: {
"1. open": "137.7500",
"2.高點": "137.7500",
"3. low": "137.7500",
"4. close": "137.7500",
"5. volume": "478".
},
"2021-09-09 16:30:00"/span>: {
"1. open": "137.8000",
"2.高": "137.8000",
"3. low": "137.8000",
"4. close": "137.8000",
"5. volume": "459"。
},
}
};
const myfunction=(myobject)=> {
var newArray = [] 。
var firstobj = myobject['時間序列(5min)']。
for (var key in firstobj) {
console.log(key)。
newArray.push( {
x: key.substr(11, 19) 。
y: myobject['Time Series (5min)'][`${key}`][`4. close']
});
}
return newArray
}
console.log(myfunction(data))
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
這是因為newObject每次呼叫都會更新。 所以它保留最后一個作為變數。看看這個圖片。

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312770.html
標籤:
